أقفال القراءة والكتابة: مقسمة إلى أقفال القراءة وأقفال الكتابة ، لا توبيخ أقفال القراءة المتعددة ، وقراءة الأقفال وكتابة أقفال حصرية بشكل متبادل ، والتي يتم التحكم فيها بواسطة JVM نفسها. إذا كان الكود الخاص بك يقرأ فقط البيانات ، فيمكنه قراءة العديد من الأشخاص في نفس الوقت ، لكن لا يمكنهم الكتابة في نفس الوقت ، ثم اقرأ القفل ؛ ، ثم اكتب جوهر القفل باختصار ، اقرأ القفل عند القراءة ، واكتب القفل عند الكتابة!
ثلاثة مؤشرات ترابط قراءة البيانات ، ثلاثة مؤشرات ترابط كتابة مثال على البيانات:
يمكنك القراءة في نفس الوقت ، لا يمكنك كتابتها في نفس الوقت ، ولا يمكنك الكتابة في نفس الوقت ، ولا يمكنك قراءتها عند الكتابة.
اقرأ القفل عند القراءة ، اقرأ فتح القفل ؛
انتبه لفتح أخيرًا.
حزمة com.ljq.test.Thread ؛ public static void main (string [] args) {final readwrite rw = new ReadWrite () ؛ {rw.read () ؛}} .start () ؛ (). البيانات ، ولكن هناك عدة مؤشرات ترابط لقراءة البيانات في نفس الوقت. READWRITELOCK = REANTRANTREADWING .sleep ((طويل) (Math.Random () * 1000)) ؛ {E.PrintStackTrace () ؛} أخيرًا {rwl.readlock () () ؛ .
تصميم نظام ذاكرة التخزين المؤقت لنظام ذاكرة التخزين المؤقت: إذا كنت بحاجة إلى أخذ البيانات ، فأنت بحاجة إلى الاتصال بكائني العام GetData (مفتاح السلسلة). ، سيأتي شخص ما إلى هذه البيانات في المرة القادمة ، وسأعيد هذا الرقم مباشرة دون العثور عليه في قاعدة البيانات. لا تجد قاعدة البيانات للبيانات ، تعال إلي.
حزمة com.ljq.thread System * * * Author Administrator * */Public Class CacheDemo {Private Map <String ، Object> Cache = New HashMap <String ، Object> () ؛ ؛ من Caching} readwritelock reentrantreadwock () ؛ / تحقق أولاً مما إذا كانت هناك قيمة في الذاكرة الداخلية إذا (القيمة == null) {// إذا لم يكن الأمر ، اكتب قفل RWL.Readlock (). Out.println ("اقرأ البيانات من قاعدة البيانات") ؛ Unlock () ؛} // RW لاستعادة حالة القراءة والكتابة RWL.Readlock (). قيمة؛}}
نتائج الظهر: