English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

الفرق بين ReentrantLock والتحقق في جافا

هناك طريقتان يمكن من خلالها استخدام عدة ثنيات لتحديد الموارد المشتركة. الأولى هي قفل العدواني (Or ReadWriteLock)، والثانية هي باستخدام طريقة Synchronized.

يقدم مكتبة Java concurrent package في Java 5 فئة ReentrantLock 

إنه تنفيذ لـ Lock interface، وفقًا لتعليمات Java docs، يقدم تنفيذ Lock interface عمليات أوسع من تلك التي يمكن الحصول عليها باستخدام الطرق المزامنة

الترتيبالمفتاحقفل متعدد الدخولمزامنة
1
الحصول على القفل 
يقدم فئة القفل المتعدد الدخولlock()طريقة الحصول على قفل الموارد المشتركة من خلال السطر 
للحصول على القفل، يجب عليك فقط كتابة مفتاح الحماية  
2
إطلاق القفل 
لمراجعة القفل، يجب على البرمجي استدعاءunlock()الطريقة
إكمال ضمني 
3
 قدرة الإلغاء
يمكن استخدام طريقة lockInterruptible() لإلغاء تشغيل السطر  
لا يوجد طريقة لإلغاء تشغيل السطر
4
عدالة 
يحتوي هذا النوع من طريقة التركيب على معامل العدالة. إذا تم تعيينه على true، فإن القفل سيمنح حقوق الوصول لـ *السطر الذي ينتظر لفترة أطول

لا يضمن القفل أي حقوق الوصول محددة
5
ترتيب إطلاق القفل 
يمكن إطلاق القفل بأي ترتيب 
يجب إطلاق القفل وفقًا للترتيب الذي تم الحصول على القفل 

مثال على ReentrantLock

public class ReentrantLockExample implements Runnable{
   private Lock lock=new ReentrantLock();
   @Override
   public void run() {
      try {
         lock.lock()
         //تحديد بعض الموارد
      }
      catch (InterruptedException e) {
         e.printStackTrace();
      }
      finally {
         lock.unlock();
      }
   }
}

مثال على SynchronizedLock

public class SynchronizedLockExample implements Runnable{
   @Override
   public void run() {
      synchronized (resource) {
         //تحديد بعض الموارد
      }
   }
}
أنت قد تحب