English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
هناك طريقتان يمكن من خلالها استخدام عدة ثنيات لتحديد الموارد المشتركة. الأولى هي قفل العدواني (Or ReadWriteLock)، والثانية هي باستخدام طريقة Synchronized.
يقدم مكتبة Java concurrent package في Java 5 فئة ReentrantLock
إنه تنفيذ لـ Lock interface، وفقًا لتعليمات Java docs، يقدم تنفيذ Lock interface عمليات أوسع من تلك التي يمكن الحصول عليها باستخدام الطرق المزامنة
الترتيب | المفتاح | قفل متعدد الدخول | مزامنة |
---|---|---|---|
1 | الحصول على القفل | يقدم فئة القفل المتعدد الدخولlock() طريقة الحصول على قفل الموارد المشتركة من خلال السطر | للحصول على القفل، يجب عليك فقط كتابة مفتاح الحماية |
2 | إطلاق القفل | لمراجعة القفل، يجب على البرمجي استدعاءunlock() الطريقة | إكمال ضمني |
3 | قدرة الإلغاء | يمكن استخدام طريقة lockInterruptible() لإلغاء تشغيل السطر | لا يوجد طريقة لإلغاء تشغيل السطر |
4 | عدالة | يحتوي هذا النوع من طريقة التركيب على معامل العدالة. إذا تم تعيينه على true، فإن القفل سيمنح حقوق الوصول لـ *السطر الذي ينتظر لفترة أطول | لا يضمن القفل أي حقوق الوصول محددة |
5 | ترتيب إطلاق القفل | يمكن إطلاق القفل بأي ترتيب | يجب إطلاق القفل وفقًا للترتيب الذي تم الحصول على القفل |
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(); } } }
public class SynchronizedLockExample implements Runnable{ @Override public void run() { synchronized (resource) { //تحديد بعض الموارد } } }