Lock(), UnLock(), ReentrantLock(), TryLock() nedir ve Java'daki Senkronize Bloktan farkı nedir?]

Yayınlanan: 2020-07-05

Bu eğitimde Lock(), UnLock(), ReentrantLock(), TryLock() ve Java'daki Senkronize Bloktan nasıl farklı olduğunu inceleyeceğiz.

Sizin de aşağıdaki sorularınız varsa doğru yerdesiniz.

  • Java'daki kilitler
  • Java Kilidi Örneği ve Eşzamanlılık Kilidi vs senkronize
  • Java Eşzamanlılık Eğitimi – Reentrant Kilitleri
  • senkronizasyon – Java için uygun kilitleme/kilit açma kullanımı
  • java – Senkronizasyon ve Kilitleme
  • java kilit açma örneği
  • java'da kilitleme mekanizması
  • java kilidi farklı iş parçacığının kilidini aç

Başlayalım. İlk önce bu terimlerin her birini anlayalım ve sonra çalışma örneğini gözden geçirelim.

Kilit():

java.util.concurrent.locks . Kilit, senkronize bloklar gibi bir iş parçacığı senkronizasyon mekanizmasıdır, ancak kilitler Java'nın senkronize bloklarından daha karmaşık olabilir. Yerleşik senkronizasyon ve monitörlerden farklı koşulları kilitleme ve bekleme için bir çerçeve sağlayan bir arayüz ve sınıflardır.

Kilidini aç():

UnLock(), Object üzerindeki kilidi serbest bırakır.

ReentrantLock():

Bir ReentrantLock , en son başarıyla kilitlenen, ancak henüz kilidini açmayan iş parçacığına aittir . Kilit başka bir iş parçacığına ait olmadığında, bir iş parçacığı çağırma lock geri döner ve kilidi başarıyla alır. Geçerli iş parçacığı zaten kilide sahipse, yöntem hemen dönecektir.

TryLock():

TryLock(), yalnızca çağrı sırasında boşsa kilidi alır.

İpucu-1

Yalnızca bir nesneyi kilitliyorsanız, synchronized.

Senkronize ile, çok net ve yanlış yapmak imkansız:

Örnek Ayrıntılar:

  1. Sınıf oluşturun: CrunchifyLockTutorial.java
  2. İç sınıflar oluşturun: Şirket ve CrunchifyLoop
  3. Main'den, Company sınıfının iki nesnesini oluşturun
  4. Bu nesnelerde 10 için iş parçacığı döngüsünü başlat
  5. Şirket1, Şirket2 ile konuşurken – bir nesneyi kilitler. Aynı zamanda – eğer Company2 ile konuşmak istiyorsa o zaman – Company1 – Kilit zaten var diyor. (Her iki şirket de zaten konuşuyor).

Çıktı:

İpucu-2

java.util.concurrent içindeki yardımcı programların yaptığı her şeyi, synchronized , volatile veya wait gibi düşük seviyeli temel öğelerle gerçekleştirebilirsiniz.