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

  • DigitalRev TV

    DigitalRev T

    30 AĞUSTOS 2007
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009
  • Rayone GB

    Rayone GB

    14 Temmuz 2007