بيئة تشغيل هذا البرنامج التعليمي: نظام windows7، إصدار java10، كمبيوتر DELL G3.
1. المفهوم
قفل القراءة والكتابة المعاد دخوله يحتفظ بقفل القراءة والكتابة داخليًا. لا تزال الطبقة السفلية هي AQS، لكن AQS لديه كمية حالة واحدة فقط. كيفية التحكم في القراءة والكتابة في نفس الوقت؟ يتم استخدام الحالة (int) هنا حيث تمثل البتة حالة القراءة، وتمثل البتات المنخفضة 16 الكتابة، وتمثل الـ 16 بتات العالية عدد الخيوط التي تحصل على قفل القراءة، وتمثل البتات المنخفضة 16 رقم إعادة الدخول لقفل الكتابة. .
2. المبدأ
تم التنفيذ باستخدام قائمة انتظار CAS+AQS . وهو يدعم الأقفال العادلة والأقفال غير العادلة، وتنفيذ الاثنين متشابه
3. أمثلة
الطبقة العامة ReentrantDemo تنفذ Runnable { قفل القفل = ReentrantLock () الجديد؛ @تجاوز تشغيل الفراغ العام () { تعيين()؛ } مجموعة الفراغ العامة () { يحاول { lock.lock(); System.out.println("طريقة التعيين"); يحصل()؛ } قبض (الاستثناء ه) { printStackTrace(); } أخيراً { lock.unlock();// يجب إصداره أخيرًا } } الحصول على الفراغ العام () { يحاول { lock.lock(); System.out.println("الحصول على الطريقة"); } قبض (الاستثناء ه) { printStackTrace(); } أخيراً { lock.unlock(); } } public static void main(String[] args) { ReentrantDemo reentrantDemo = new ReentrantDemo(); موضوع جديد(reentrantDemo).start(); } }
ما ورد أعلاه هو اختبار إعادة الدخول لـ Java ReentrantLock، وأعتقد أنه بعد قراءة المقالة بأكملها، سيتمكن الجميع من فهم استخدام ReentrantLock في البداية، ويمكنك أيضًا توسيع المحتوى ذي الصلة بقفل إعادة الدخول بعد الفصل.