29 Mart 2010, PAZARTESİ
Basit bir senaryo bekle kullanarak() haber() java
Tam bir basit senaryo yani öğretici olsun bu nasıl kullanılması gerektiğini de tavsiye edebilirim, özellikle bir Sıra ile?
CEVAP
29 Mart 2010, PAZARTESİ
Sıra bir örnek, ama basit: son derece)
class MyHouse {
private boolean pizzaArrived = false;
public void eatPizza(){
synchronized(this){
while(!pizzaArrived){
wait();
}
}
System.out.println("yumyum..");
}
public void pizzaGuy(){
synchronized(this){
this.pizzaArrived = true;
notifyAll();
}
}
}
Bazı önemli noktalar:
1) ASLA yapmam
if(!pizzaArrived){
wait();
}
Her zaman(koşul), çünkü süre kullanın
- a) konuları Tük uyanık olabilir devlet olmadan beklemekten herkes tarafından onaylanmış. hatta (zaman pizza adam chime yüzük yoktu biri yemek denemek karar verir pizza.).
- b) kontrol etmelisiniz
tekrar aldıktan sonra durumu
kilit senkronize. Diyelim ki pizza
sonsuza dek sürmez. Uyanık,
pizza için line-up, ama değil
herkes için yeterli. Eğer ... Eğer ...
kontrol edin, kağıt yemek olabilir! :)
(muhtemelen daha iyi bir örnek olurdu
while(!pizzaExists){ wait(); }
.
2) nofity/bekle çağırmadan önce kilidi (senkronize) tutmak gerekir. Konuları da uyanma önce kilidi almak için.
3) senkronize blok içinde herhangi bir kilidi alınıyor kaçının ve yabancı yöntemleri (ne yaptığını tam olarak emin değilsin yöntemleri) çağırmak için çalışıyoruz. Eğer varsa, kilitlenmeleri önlemek için gerekli önlemleri almak emin olun.
4) bildirim ile dikkatli Olun(). Sopa ile notifyAll() ne yaptığını öğrenene kadar.
5)Son olarak, fakat en az değil, okuma Java Concurrency in Practice!
Bunu Paylaş:
Java kullanarak Java SE server sadece ...
Neden bekle() haber() Java'in Nes...
Java kullanarak.net.Ateş ve işlemek iç...
Kullanarak basit bir web sunucusu olar...
Nasıl hat Java kullanarak büyük metin ...