Bir run() ileten iş parçacıklarından çağrılan bir yöntem var. Ben geçti ve bekleme()notifyAll iş parçacığı uyanıyor.
bir şartı olarak kullanmak kaç Konuları hesaplamak için bir yineleyici yapmak Ben çalıştırmak konuları()
public void testMethod(Object x) throws InterruptedException {
synchronized (x) {
while(threadsWaiting <= 5) {
threadsWaiting++;
System.out.println(x.getName() + " waiting " +
" | Threads waiting: " + threadsWaiting);
x.wait();
}
x.notifyAll();
System.out.println(x.getName() + " passed " +
" | Threads waiting: " + threadsWaiting);
}
}
çalıştırıldığında aşağıdaki kod
Örnek çıkışı:
Thread 0 is created
Thread 1 is created
Thread 2 is created
Thread 3 is created
Thread 4 is created
Thread 5 is created
Thread 6 is created
Thread 7 is created
Thread 8 is created
Thread 9 is created
Thread 10 is created
Thread 11 is created
Thread 12 is created
Thread 13 is created
Thread 14 is created
Thread 15 is created
Thread 16 is created
Thread 17 is created
Thread 18 is created
Thread 19 is created
Thread 20 is created
Thread 16 waiting | Threads waiting: 1
Thread 9 waiting | Threads waiting: 2
Thread 5 waiting | Threads waiting: 3
Thread 14 waiting | Threads waiting: 4
Thread 0 waiting | Threads waiting: 5
Thread 13 waiting | Threads waiting: 6
Thread 15 passed | Threads waiting: 6
Thread 10 passed | Threads waiting: 6
Thread 4 passed | Threads waiting: 6
Thread 12 passed | Threads waiting: 6
Thread 1 passed | Threads waiting: 6
Thread 20 passed | Threads waiting: 6
Thread 11 passed | Threads waiting: 6
Thread 18 passed | Threads waiting: 6
Thread 3 passed | Threads waiting: 6
Thread 2 passed | Threads waiting: 6
Thread 17 passed | Threads waiting: 6
Thread 8 passed | Threads waiting: 6
Thread 6 passed | Threads waiting: 6
Thread 19 passed | Threads waiting: 6
Thread 7 passed | Threads waiting: 6
Eğer geçemiyor bekleyen bütün evreleri Görüldüğü gibi.
Bu yalnızca şu şekilde çalışır: 10 x nesne geçiriyorum. 5 tanesi bekle(), diğer 5 baskısı. Yazdırıldıktan sonra x.notifyAll() çağrılır, ancak artık 'Bitir' yazdırılmaz.
NotifyAll()? I çağırdıktan sonra neden boştalar? Bitirdi Keşke notifyAll diyoruz sonra bile 5 kez basılır çünkü onlar boşta olduğunu biliyorum()
Sorununuzu yeniden üretemiyor. IDE'imde ve [ideone] 'da (http://ideone.com/ODvI0w) 5 'Waiting' ve 10' Finished' i alıyorum. – Nier
Her iş parçacığındaki x'iniz farklı ** örnek ** var mı? Çünkü eğer x'imi statik olmayandan statik olmayana değiştirirsem, sorunuzda bahsettiğiniz gibi 5 'Bekliyor 've 5' Bitirdi 'olurum. – Nier
@Nier Evet, her bir iş parçacığındaki farklı ifadeler, 'ClassName.method (bu)' gibi onu iletirken, '' run '' (method '' method '' sorusu içinde olan yöntem ve 'bu' x –