SORU
20 Kasım 2009, Cuma


Neden bekle() haber() Java'in Nesne sınıfı olarak ilan edildi?

Neden wait() notify() yöntemleri Object sınıfta bildirilen, yerine Thread sınıf?

CEVAP
20 Kasım 2009, Cuma


Çünkü, bu işlevi kullanmak için, belirli bir Nesne (ya da özellikle, monitör) üzerinde bekleyin.

Bu yöntemler işe nasıl yanlış olabilir düşünüyorum. Sadece İplik-parçalı yapı seviye de değiller yanideğil5 ** wait() arama ve sonraki çağrı tarafından uyandı. Bunun yerine, her zaman belirli bir nesne üzerinde wait() Ara ve sadece notify çağrıları ile uyandıbu nesne üzerinde.

Aksi takdirde bu eşzamanlılık temel öğeler sadece ölçek olmaz, çünkü iyidir; programı notify() herhangi bir yerde herhangi bir çağrı berbat potansiyeline sahip olacak bu yana Genel ad olan eşdeğer olacaktırherhangi bironlar gibi eşzamanlı kod herhangi bir iş parçacığı wait() çağrı engelleme uyandıracağını. Dolayısıyla neden bu ara onları belirli bir nesne; verir bağlamı için bekle-bildir çift için çalışır, bu yüzden zaman sana haber myBlockingObject.notify(), bir özel nesne, sen-ebilmek var olmak emin olacağın tek uyan iş parçacığı arayan bekle yöntemleri sınıf. Başka bir nesne bekliyor olacak Bahar parçacığı bu çağrı ile uyanmak olmaz, ve tam tersi.

Edit: Ya da başka bir bakış açısından ele bir kolu bekleyen iş parçacığı ve notify() Ara düşündüm sorunuzu bekliyorumbu iş Parçacığıonu uyandır. Bu şöyle yapılıyor nedeni, temizlik bir sürü kendiniz yapmak zorunda olduğunu ifade etti. Konu bekleyecek diğer konuları görmek olabilir kendisi için bir referans bir yerde yayınlamak zorunda kalacaktır; bu doğru tutarlılık ve görünürlük zorlamak için senkronize olması gerekir. Ve bu başvuruyu ele almak gerekecek bir konu uyanıp, onu uyandırmak ve onu okudun yerden kaldırmak istiyorum. Çok fazla manuel iskele dahil, ve çok daha fazla şansı olacak yanlışlar (özellikle bir eşzamanlı ortam) göre sormak için aramıştım myObj.wait() uyku iplik ve myObj.notify() biri uyandı iplik.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • PlayStation

    PlayStation

    16 Aralık 2005
  • whatever

    whatever

    30 EYLÜL 2005