2013-06-26 18 views

Odpowiedz

33

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.

+6

można było szybciej ...,) – Maroun

+14

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. –

+3

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 :) –

6

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.

similar thread in this forum

14

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.

+2

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. –

+0

Ż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 –

+0

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

2

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ą?

0

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"); 
    } 

} 
2

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.

http://i.stack.imgur.com/goygW.jpg