القفل هو أداة للتحكم في مؤشرات الترابط المتعددة للوصول إلى الموارد المشتركة. بشكل عام ، يوفر القفل زيارات حصرية للموارد المشتركة. لا يوجد سوى موضوع واحد للحصول على قفل في وقت واحد. ومع ذلك ، قد تسمح بعض الأقفال بمقابلات مع موارد مشتركة ، مثل ReadWritelock (الحفاظ على زوج من الأقفال ذات الصلة ، واحدة للتشغيل القراءة فقط ، والآخر للكتابة).
1. Lock يوفر عمليات الاستحواذ غير المشروطة ، المستديرة ، والتوقيت ، ومقاطع القفل ، وجميع أساليب القفل وإلغاء التخزين كبيرة.
قفل الواجهة العامة {void lock () ؛ MODE BOOLEAN TRAILLOCK (under timeout ، timeunit under)
2. REENTRANTLOCK يدرك واجهة القفل.
3. يتطلب الشكل المعياري لواجهة القفل قفل الإصدار. unlock () لإطلاق القفل. إذا كان رمز القفل -الحارس غير طبيعي في الخارج ، فلن يتم إصداره أبدًا.
استخدام قفل المحاكاة التالي: على افتراض أن هناك خيطان (مؤشر الترابط A ، B) لاستدعاء طريقة الطباعة (اسم السلسلة) ، فإن الموضوع A مسؤول عن طباعة سلسلة "Zhangsan" ، والموضوع B مسؤول عن طباعة "Lisi" ' خيط.
1. عند إضافة طريقة LINT (اسم السلسلة) ، لم يتم تنفيذ مؤشر الترابط A ، وبدأ مؤشر ترابط B في التنفيذ ، ثم سيواجه الاسم المطبوع المشكلات التالية.
2. عند إضافة طريقة اسم الطباعة إلى القفل ، يتم تنفيذ طريقة الطباعة (اسم السلسلة) بعد اكتمال A بعد اكتمال التنفيذ لتحقيق تأثير الإقصاء المتبادل أو التزامن.
حزمة com.ljq.test.ther string [] args) {new Locktest (). ) {try {thread.sleep (10) ؛} catch (interruptedException e) {E.PrintStackTrace () ؛ Override public void run () {بينما true) {trail {thread.sleep (10) ؛} catch (interruptedException e) . ؛