Java'da eşzamanlı programlamada hangi monitörden bahsedilir?
"Her nesnenin bir monitörle ilişkilendirildiğini" okuduğumda bu ne anlama geliyor?
Özel bir nesne mi?
Java'da eşzamanlı programlamada hangi monitörden bahsedilir?
"Her nesnenin bir monitörle ilişkilendirildiğini" okuduğumda bu ne anlama geliyor?
Özel bir nesne mi?
Yanıtlar:
Monitör, bir nesneye eşzamanlı erişimi kontrol eden mekanizmadır.
Bu, şunları yapmanızı sağlar:
Konu 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Konu 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Bu, İplik 1 ve 2'nin aynı anda izlenen (senkronize edilmiş) bölüme erişmesini engeller. Biri başlayacak ve monitör, ilki bitmeden diğerinin bölgeye erişimini engelleyecektir.
Özel bir nesne değil. It senkronizasyon mekanizması sınıf hiyerarşisi kökünde yer: java.lang.Object
.
Orada da wait
ve notify
aynı zamanda farklı iş parçacıkları arasında iletişim için nesnenin monitörü kullanacak yöntemleri.
Class
statik yöntemler için karşılık gelen nesne olan nesneler için mevcuttur. Zaten senkronize edilmiş bir method1 () yönteminiz varsa ve method2 () 'nin senkronize olduğunu bildirirseniz, yeni monitörler oluşturulmaz ve aslında her iki yöntemi de (aynı nesne üzerinde) çağırmak aynı monitörü kilitlemeye çalışacaktır. Bu genellikle yeni gelenleri yakalar.
Bir monitör bir hem sahip bir varlıktır kilit ve bir bekleme seti . Java'da herhangi Object
biri bir monitör görevi görebilir.
Java'da monitörlerin nasıl çalıştığına dair ayrıntılı bir açıklama için, Java'da Eşzamanlı Programlama'nın İzleme Mekaniği bölümünü okumanızı tavsiye ederim (önceki bağlantı Google kitaplarındaki önizlemeyi gösterir ve bu bölüm okunabilir).
Wakes up all threads that are waiting on this object's monitor.
notifyall () hakkında söylediğimizde, aldığım şey nesnenin korunmasıdır (dahili varlık / nesnenin yardımıyla) tüm iş parçacıkları kilitlenmeyi bekliyor, bu iç varlık / nesne monitör olarak adlandırılıyor?
Java dili ve çalışma zamanı sistemi, monitörlerin kullanımı yoluyla iş parçacığı senkronizasyonunu destekler.
Bir monitör, belirli bir veri öğesi (bir durum değişkeni) ile ilişkilendirilir ve bu veriler üzerinde bir kilit işlevi görür. Bir iş parçacığı bazı veri öğeleri için monitörü tuttuğunda, diğer iş parçacıkları kilitlenir ve verileri inceleyemez veya değiştiremez.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Nesnelere teker teker erişimi kontrol etmek için bir mekanizma
Monitor, iş parçacıklarının hem karşılıklı dışlama hem de belirli bir koşulun gerçekleşmesi için bekleme (engelleme) yeteneğine sahip olmasını sağlayan bir senkronizasyon yapısıdır.
Monitörler ayrıca diğer iş parçacıklarına durumlarının karşılandığını bildirmek için bir mekanizmaya sahiptir. Hem kilit hem de bekleme setine sahip bir varlıktır. Java'da herhangi bir Nesne bir monitör görevi görebilir.
Java sanal makinesinde, her nesne ve sınıf mantıksal olarak bir monitörle ilişkilendirilir. Monitörlerin karşılıklı dışlama yeteneğini uygulamak için, her nesne ve sınıfla bir kilit (bazen muteks olarak adlandırılır) ilişkilendirilir. Buna işletim sistemi açısından semafor denir, muteks ise ikili bir semafordur.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
monitör, bir veri üyesi veya nesne girildiğinde elde edilen, senkronizasyon bloğu (kritik bölüm) olan nesne veya veri üyesi ile ilişkilendirilir ve çıkış olduğunda serbest bırakılır.