عند استخدام الكلمة الرئيسية لغة Java لتعديل طريقة أو كتلة رمز ، يمكن أن تضمن أن مؤشر ترابط واحد ينفذ رمز واحد في نفس الوقت.
1. استخدمه عند إعلان الطريقة ، بعد مشغل النطاق (العام ، وما إلى ذلك) ، قبل إعلان نوع الإرجاع (الفراغ ، إلخ). أدخل الطريقة في وقت واحد ، ومواضيع أخرى إذا كنت ترغب في الاتصال بهذه الطريقة في هذا الوقت ، يمكنك فقط الانتظار في الخط. يمكن أن تدخل.
على سبيل المثال:
synmethod synmethod synmethod () {// طريقة الجسم}2. تم تضمينها متزامنة بين قوسين ، وينطق بمتغيرات في كل مرة.
Public Int Synmethod (int A1) {Synchronized (A1) {// يمكن أن يدخل مؤشر ترابط واحد فقط في وقت}} 3. هناك كائن في الأقواس بعد المزامنة.
الطبقة العامة MyTherefore {public static void main (string args []) {mythread mt = new MyThread () ) t6 ") ؛ t1.start () ؛ t2.start () ؛ t3.start () ؛ t4.start () ؛ t5.start () ؛ t6.start () ؛} public void run () ) {system.out.println (thread.currentThread (). getName ()) ؛بالنسبة إلى 3 ، إذا دخل مؤشر الترابط ، فإنه يحصل على قفل الكائن الحالي ، ثم لا يمكن إجراء أي عمليات مؤشرات ترابط أخرى على جميع الكائنات في الفصل. لماذا قفل الكائن بأكمله دون السماح لخيوط أخرى باستخدام طرق التزامن الأخرى بإيجاز في الكائن للوصول إلى الموارد المشتركة؟ إذا كان للكائن موارد متعددة ، فلا يحتاج إلى قفل جميع مؤشرات الترابط في الخارج لمجرد وجود مؤشر ترابط استخدم بعض الموارد. نظرًا لأن كل كائن يحتوي على قفل ، يمكنك استخدام كائن افتراضي لقفله على النحو التالي:
class finegrainlock {mymemberClass x ، y ؛ استخدم الموارد المشتركة المتزامنة (ylock) {// Access y Here}} public void bar () {Synchronized (this) {// Access Clor X و Y Here} // do something ing هنا - ولكن لا تستخدم الموارد المشتركة} }4. الفئة في الأقواس بعد المزامنة.
ArrayWithlockorder {private static num_lock = 0 ؛ / إضافة 1 إلى رقم القفل. lock_order = num_locks ؛ }} public longorder () {return lock_order ؛ ؛ int size = a1.array (). الطول ؛ // طلب. أولاً = A2 ؛ متزامن (آخر) {int [] arr1 = a1.array () ؛ أنا] ؛بالنسبة إلى 4 ، إذا دخل الخيط ، فلا يمكن تنفيذ جميع العمليات في الخيط في الفصل ، بما في ذلك المتغيرات الثابتة والطرق الثابتة.
ملاحظة: ملخص الاستخدام المتزامن
يستخدم متزامن أماكن مختلفة للتأثير على الرمز:
1. طريقة تعديل الكلمات الرئيسية المتزامنة
على افتراض أن P1 و P2 كائنات مختلفة من نفس الفئة ، فإن هذه الفئة تحدد كتلة التزامن أو طريقة التزامن في المواقف التالية ، ويمكن أن تسميها P1 و P2.
طريقة void المتزامنة العامة () {//}هذه هي طريقة التزامن. وهذا يعني أنه عندما ينفذ كائن P1 طريقة التزامن هذه في مؤشرات ترابط مختلفة ، فإنها ستشكل استبعادًا متبادلاً لتحقيق تأثير التزامن. في الوقت نفسه ، إذا كانت هناك طرق تزامن متعددة في الكائن ، عندما ينفذ مؤشر ترابط طريقة متزامنة في الكائن ، لا يُسمح بتنفيذ طرق التزامن الأخرى في الكائن بواسطة مؤشرات ترابط أخرى. ومع ذلك ، فإن كائنًا آخر P2 الذي تم إنشاؤه بواسطة فئة ينتمي إليه هذا الكائن يمكنه استدعاء هذه الطريقة بشكل تعسفي مع إضافة الكلمة الرئيسية المتزامنة.
رمز المثال أعلاه يعادل الرمز التالي:
طريقة الفراغ العام () {synchronized (هذا) {// ..}}هذه المرة هو قفل كائن P1 فقط إذا كان الخيط الذي حصل على قفل P1 يمكن أن يستدعي طريقة مزامنة P1. تخلص من سيطرة آلية التزامن وتسبب في ارتباك البيانات.
2. مزامنة الكتل ، رمز العينة كما يلي:
طريقة الفراغ العام () {synchronized (هذا) {// ..}}في هذا الوقت ، يكون القفل هو الكائن SO ، ويتوافق كل كائن مع قفل فريد ، لذا فإن أي شخص يحصل على مؤشر ترابط هذا سيكون قادرًا على تشغيل الكود الذي يتحكم فيه. عندما يكون هناك كائن واضح كقفل ، يمكنك كتابة البرنامج مثل هذا ، ولكن عندما لا يكون هناك كائن واضح كقفل ، فأنت تريد فقط مزامنة قطعة من الكود ، يمكنك إنشاء متغير مثيل خاص (يجب أن يكون كائن) للعمل كقفل:
البايت الخاص [] قفل = بايت جديد [0] ؛
ملاحظة: تعتبر كائنات صفيف البايت ذات الطول أكثر اقتصادا من أي كائن لإنشاء رموز البايت المترجمة.
3. استخدام وظيفة متزامنة إلى ثابت ، رمز المثال هو كما يلي:
class foo {public synchronized method1 () {//. كلتا الطريقتين المتزامنتين يدعون قفل الفئة للفئة التي ينتمي إليها كائن هذه الطريقة (الفئة ، لم يعد كائنًا محددًا تم إنشاؤه بواسطة هذه الفئة).
يمكن استنتاج أنه إذا قام الفئة بتعريف وظيفة ثابتة متزامنة A ، كما تحدد وظيفة مثيل متزامنة B ، فلن يشكل الكائن نفسه OBJ من هذه الفئة طريقة A و B على التوالي عند الوصول إلى طريقتين A و B في مؤشرات ترابط متعددة المزامنة لأن أقفالها مختلفة. إن قفل الطريقة A هو الفئة التي ينتمي إليها OBJ ، وقفل B هو الكائن الذي ينتمي إليه OBJ.