SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cdgotx

    cdgotx

    8 Kasım 2011
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • ŠĩŗĜŕôŵåɭȍҭҭ

    ŠĩŗĜŕô

    29 Kasım 2009