Dlaczego metody sleep()
i yield()
są zdefiniowane jako metody static
w java.lang.Thread
class
?Java: dlaczego Thread.sleep() i yield() są statyczne?
Odpowiedz
Kod zostanie wykonany dopiero po wykonaniu someXThread
, w którym to przypadku podanie someYThread
do uzyskania będzie bezcelowe. Ponieważ jedynym wątkiem, który warto wywołać yield
, jest bieżący wątek, tworzą one metodę static
, więc nie tracisz czasu na wywoływanie yield
na some other thread.
Jeśli wybierzesz metodę yield
lub sleep
, będzie ona dotyczyła dowolnego aktualnie wykonywanego wątku, a nie konkretnego wątku - nie musisz określać, który wątek jest aktualnie uruchomiony, aby zwolnić procesor.
To dlatego, gdy dzwonisz z tych metod, te są stosowane w tym samym wątku, który jest uruchomiony. Nie można wskazać innego wątku, aby wykonać operację, taką jak: sleep()
lub wait
. Cała operacja jest wykonywana na wątku, który jest aktualnie wykonywany.
Myślę, że oczekiwanie nie jest metodą statyczną, powodem jest czekanie i powiadamianie o metodach używanych do komunikacji między dwoma wątki podczas snu i statycznego są używane wewnątrz bieżącego wątku. –
Żadne 'wait' nie jest statyczne, chciałem powiedzieć, że jeśli wywołasz metodę wait, powoduje to zatrzymanie bieżącego wątku do momentu, gdy' notify' zostanie wywołany przez inny wątek. Masz rację co do komunikacji między dwoma wątkami –
Ale możesz tylko wywołać 'wait' na bieżącym wątku, jeśli podjąłeś blokadę bieżącego wątku. 'wait' i' sleep' są całkiem różne. – selig
To samo powoduje, że metody stop() i suspend() są przestarzałe. Intruzja w stanie nici z zewnątrz jest niebezpieczna i może spowodować nieprzewidywalne skutki. A jeśli na przykład sen nie jest statyczny, jak myślisz, jak będzie się działo z przerwą?
Zarówno metoda uśpienia, jak i wydajność są rodzime. Aby lepiej zrozumieć powyższe odpowiedzi, stworzyłem dwie klasy ClassA i ClassB z tą samą statyczną metodą. Wywołałem metodę innej klasy, aby sprawdzić jej zachowanie. Możemy więc nazywać metodę statyczną innej klasy.
Możliwe, że istnieje inny powód, dla którego metoda uśpienia jest statyczna.
public class ClassA {
public static void method(){
System.out.println("Inside ClassA method");
}
public static void main(String[] args) {
method();
ClassB classb = new ClassB();
classb.method();
}
}
public class ClassB {
public static void method(){
System.out.println("Inside ClassB method");
}
}
Są statyczne tak, że pojęcie nadrzędne można uniknąć tj
Gdy są one nazywane w odniesieniu klasy rodzic trzymać klasę dziecko obiektu podobnego sytuacji realizuje Metoda Ukrywanie koncepcję i nie nadrzędnymi powodu metoda statyczna natury Zostanie uruchomiona metoda klasy nadrzędnej (tutaj klasa wątków), która ma pełną funkcjonalność snu i wydajności.
- 1. dlaczego stałe Java są zadeklarowane jako statyczne?
- 2. Java: LockSupport.parkNanos vs Thread.Sleep (...)
- 3. Dlaczego zmienne Java ThreadLocal być statyczne
- 4. Czy zmienne java enum są statyczne?
- 5. Dlaczego nie są dozwolone statyczne pływaki const?
- 6. Klasy Java i bloki statyczne
- 7. Dlaczego Thread.sleep jest zły w użyciu
- 8. Python yield vs Ruby yield
- 9. Java: statyczne zagnieżdżone klasy i odbicie: "$" vs "."
- 10. Statyczne bloki - kiedy są wykonywane
- 11. Java statyczne samo-odniesienia
- 12. Korzystanie z futures i Thread.sleep
- 13. Python Metody statyczne, dlaczego?
- 14. Thread.sleep vs. TimeUnit.SECONDS.sleep
- 15. Asynchronous Thread.Sleep()
- 16. Thread.sleep() Nigdy nie zwraca
- 17. drzewo binarne statyczne metody Java
- 18. Atrybuty statyczne (Python kontra Java)
- 19. Twisted Deferred.addCallBack() vs. yield i @inlineDeferred
- 20. Zrozumienie słowa kluczowego yield i LINQ
- 21. Linq Do XML, yield i inne
- 22. Bloki i zmienne statyczne
- 23. Czy instancje wyliczeń są statyczne domyślnie?
- 24. Go: http statyczne katalogi nie są podawane
- 25. Testowanie za pomocą Thread.sleep
- 26. Dlaczego blokady są Serializable w java?
- 27. Dlaczego cmake_link_libraries zawierają statyczne biblioteki?
- 28. Thread.sleep() w pętli while
- 29. Jak wywołać natychmiastową aktualizację interfejsu GUI Java? (konflikt z Thread.sleep())
- 30. Cuda słowa kluczowego yield
można było szybciej ...,) – Maroun
Inne nitki nie koniecznie otrzymuje się - jeżeli istnieje więcej niż jeden procesor (rdzenia), to mogą one być aktywne. Prawdziwym powodem jest to, że stosowanie plonu i snu w innych wątkach jest nieprzewidywalne i niebezpieczne, naruszając prywatność innych wątków. –
Pytanie o to, dlaczego ta metoda jest statyczna? Nie chodzi o dostęp do innych wątków. I na razie dobry punkt do tej pory :) –