Java Sanal Makinesi İçinden Alıntı
Java sanal makinesindeki bir iş parçacığı, bir izleme bölgesinin başına geldiğinde bir kilit ister. Java'da iki tür izleme bölgesi vardır: senkronize ifadeler ve senkronize yöntemler.
İzleme
Bir monitör, aynı anda yalnızca bir iş parçacığı tarafından işgal edilebilen özel bir oda içeren bir bina gibidir. Oda genellikle bazı veriler içerir. Bir iş parçacığı bu odaya girdiği andan ayrıldığı ana kadar odadaki tüm verilere özel erişime sahiptir. Monitör binasına girmeye "monitöre girmek" denir. Binanın içindeki özel odaya girmeye "monitör edinme" denir. Odayı işgal etmeye "monitöre sahip olma", odayı terk etmeye ise "monitörü serbest bırakma" denir. Tüm binayı terk etmeye "monitörden çıkmak" denir.
Bir monitör, bir bit veriyle ilişkilendirilmesine ek olarak, bu kitapta izleme bölgeleri olarak adlandırılacak olan bir veya daha fazla kod biti ile ilişkilendirilir.
Daha önce bahsedildiği gibi, dil, programlarınızdaki izleme bölgelerini tanımlamak için iki yerleşik yol sağlar: senkronize ifadeler ve senkronize yöntemler. Senkronizasyonun karşılıklı dışlama yönünü uygulayan bu iki mekanizma, Java sanal makinesinin komut seti tarafından desteklenmektedir.
Kilit
Monitörlerin karşılıklı dışlama özelliğini uygulamak için, Java sanal makinesi her nesne ve sınıfla bir kilidi (bazen muteks olarak adlandırılır) ilişkilendirir. Kilit, aynı anda yalnızca bir iş parçacığının "sahip olabileceği" bir ayrıcalık gibidir.
Tek bir iş parçacığının aynı nesneyi birden çok kez kilitlemesine izin verilir. Her nesne için Java sanal makinesi, nesnenin kaç kez kilitlendiğinin bir sayısını saklar. Kilidi açılmış bir nesnenin sayısı sıfırdır. Bir iplik kilidi ilk kez aldığında, sayı tekrar bire çıkarılır. İplik aynı nesne üzerinde bir kilit kazandığında, sayı yeniden artırılır.