في المثال أعلاه، تم استخدام طريقة الانضمام لفئة Thread عدة مرات. أعتقد أنك ربما خمنت ما هي وظيفة طريقة الانضمام. نعم، تتمثل وظيفة طريقة الانضمام في تحويل مؤشر ترابط التنفيذ غير المتزامن إلى تنفيذ متزامن. وهذا يعني أنه عند استدعاء طريقة البدء لمثيل مؤشر الترابط، ستعود هذه الطريقة على الفور. إذا كنت بحاجة إلى استخدام قيمة محسوبة بواسطة هذا الخيط بعد استدعاء طريقة البدء، فيجب عليك استخدام طريقة الانضمام. إذا لم تستخدم طريقة الانضمام، فليس هناك ضمان أنه عند تنفيذ عبارة تتبع طريقة البدء، سيتم تنفيذ مؤشر الترابط. بعد استخدام طريقة الانضمام، لن يستمر البرنامج في التنفيذ حتى يخرج هذا الموضوع. يوضح التعليمة البرمجية التالية استخدام الانضمام.
انسخ رمز الكود كما يلي:
الحزمة الأسطورية؛
الطبقة العامة JoinThread تمتد الموضوع
{
عدد صحيح عام ثابت n = 0;
ثابت الفراغ المتزامن المؤتمر الوطني العراقي ()
{
ن++;
}
تشغيل الفراغ العام ()
{
لـ (int i = 0; i < 10; i++)
يحاول
{
شركة()؛
Sleep(3); // من أجل جعل نتائج التشغيل أكثر عشوائية، قم بتأخيرها بمقدار 3 مللي ثانية
}
قبض (الاستثناء ه)
{
}
}
يلقي الفراغ الرئيسي العام (String[] args) استثناءً
{
Thread threads[] = new Thread[100];
for (int i = 0; i < threads.length; i++) // إنشاء 100 موضوع
Threads[i] = new JoinThread();
for (int i = 0; i < threads.length; i++) // قم بتشغيل 100 موضوع تم إنشاؤه للتو
المواضيع[i].start();
إذا (args. length > 0)
for (int i = 0; i < Threads.length; i++) // المتابعة بعد تنفيذ جميع المواضيع المائة
المواضيع[i].join();
System.out.println("n=" + JoinThread.n);
}
}
في الروتين 2-8، يتم إنشاء 100 مؤشر ترابط، وكل مؤشر ترابط يزيد المتغير الثابت n بمقدار 10. إذا تم إخراج n بعد تنفيذ جميع سلاسل الرسائل المائة، فيجب أن تكون قيمة n 1000.
1. الاختبار 1
استخدم الأمر التالي لتشغيل البرنامج أعلاه:
انسخ رمز الكود كما يلي:
جافا Mythread.JoinThread
نتائج تشغيل البرنامج هي كما يلي:
انسخ رمز الكود كما يلي:
ن = 442
قد يكون لنتيجة التشغيل هذه بعض الاختلافات في بيئات التشغيل المختلفة، ولكن بشكل عام لن تساوي n 1000. من النتائج المذكورة أعلاه، يمكننا التأكد من عدم إخراج n بعد تنفيذ جميع المواضيع المائة.
2. الاختبار 2
قم بتشغيل الكود أعلاه باستخدام الأمر التالي:
يوجد معلمة انضمام في سطر الأوامر أعلاه، في الواقع، يمكن استخدام أي معلمة في سطر الأوامر، طالما أن هناك معلمة واحدة، يتم استخدام الانضمام هنا فقط للإشارة إلى استخدام طريقة الانضمام لمزامنة التنفيذ هذه المواضيع 100.
نتائج تشغيل البرنامج هي كما يلي:
انسخ رمز الكود كما يلي:
ن = 1000
بغض النظر عن بيئة التشغيل التي تقوم فيها بتشغيل الأمر أعلاه، سوف تحصل على نفس النتيجة: n=1000. يوضح هذا تمامًا أنه يجب تنفيذ جميع سلاسل العمليات المائة، وبالتالي، يجب أن يكون n مساويًا لـ 1000.