ما هو Lock () و UnLock () و ReentrantLock () و TryLock () وكيف يختلف عن Block Synchronized Block في Java؟]

نشرت: 2020-07-05

في هذا البرنامج التعليمي ، سننتقل إلى Lock () و UnLock () و ReentrantLock () و TryLock () وكيف يختلف عن Synchronized Block في Java.

إذا كانت لديك أيضًا أسئلة أدناه ، فأنت في المكان الصحيح.

  • أقفال في جافا
  • مثال على قفل Java و Concurrency Lock مقابل المزامنة
  • برنامج Java Concurrency Tutorial - Reentrant Locks
  • التزامن - الاستخدام المناسب للقفل / فتح القفل لجافا
  • جافا - التزامن مقابل لوك
  • جافا قفل سبيل المثال
  • آلية القفل في جافا
  • جافا قفل فتح موضوع مختلف

هيا بنا نبدأ. أولاً ، دعنا نفهم كل من هذه المصطلحات ثم سنستعرض مثال العمل.

قفل():

java.util.concurrent.locks . القفل عبارة عن آلية لمزامنة الخيط مثل الكتل المتزامنة باستثناء أن الأقفال يمكن أن تكون أكثر تعقيدًا من الكتل المتزامنة في Java. وهي عبارة عن واجهات وفئات توفر إطارًا للقفل والانتظار للظروف التي تختلف عن المزامنة والشاشات المضمنة.

الغاء القفل():

حرر UnLock () القفل الموجود على الكائن.

ReentrantLock ():

ReentrantLock مملوك من قبل الخيط الأخير الذي تم قفله بنجاح ، ولكن لم يتم إلغاء قفله بعد. سيعود lock استدعاء الخيط ، والحصول على القفل بنجاح ، عندما لا يكون القفل مملوكًا لخيط آخر. ستعود الطريقة فورًا إذا كان الخيط الحالي يمتلك القفل بالفعل.

TryLock ():

يكتسب TryLock () القفل فقط إذا كان مجانيًا وقت الاحتجاج.

نصيحة 1

إذا كنت تقوم ببساطة بقفل كائن ما ، فأنا أفضل استخدام synchronized.

بينما مع المزامنة ، من الواضح جدًا ومن المستحيل أن تخطئ:

تفاصيل المثال:

  1. إنشاء فئة: CrunchifyLockTutorial.java
  2. قم بإنشاء فصول داخلية: شركة و CrunchifyLoop
  3. من الرئيسية إنشاء كائنين من فئة الشركة
  4. ابدأ حلقة الخيط لمدة 10 على تلك الكائنات
  5. بينما تتحدث Company1 إلى Company2 - تقوم بتأمين كائن. إذا كانت في نفس الوقت - إذا أرادت Company2 التحدث إلى Company1 ، فستقول - متعارض - قفل موجود بالفعل. (كلا الشركتين في نقاش بالفعل).

انتاج:

نصيحة 2

يمكنك تحقيق كل ما تفعله الأدوات المساعدة في java.util.concurrent منخفضة المستوى مثل synchronized أو volatile أو wait .