نسخة الكود كما يلي:
حزمة com.yao ؛
استيراد java.util.concurrent.countdownlatch ؛
استيراد java.util.concurrent.executorservice ؛
استيراد java.util.concurrent.executors ؛
/**
* CountDownlatch هو عداد ، والذي يحتوي على رقم أولي ،
* يجب أن ينتظر الخيط الذي ينتظر هذا العداد حتى يتم حساب العداد إلى الصفر قبل المتابعة.
*/
الطبقة العامة العد الدوارة العالمية {
/**
* الخيط الذي يهيئة المكون
*/
المكونات الفئة الثابتة العامة تنفذ Runnable {
// عداد
Countdownlatch Latch ؛
// معرف المكون
int id ؛
// طريقة البناء
المكون العام (CountDownlatch Latch ، int id) {
this.latch = latch ؛
this.id = id ؛
}
تشغيل الفراغ العام () {
// تهيئة المكون
System.out.println ("تهيئة المكون" + معرف) ؛
يحاول {
thread.sleep (500 * id) ؛
} catch (InterruptedException e) {
}
System.out.println ("Component" + id + "initial!") ؛
// انخفاض العداد بواسطة واحد
latch.countdown () ؛
}
}
/**
* ابدأ الخادم
*/
starterver starterver () الفراغ الثابت العام () يلقي الاستثناء {
System.out.println ("الخادم يبدأ.") ؛
// تهيئة خطوط العد التنازلي ذات القيمة الأولية 3
CountDownlatch Latch = New CountDownLatch (3) ؛
// ابدأ 3 مؤشرات ترابط لبدء 3 مكونات على التوالي
خدمة ExecutorService = Executors.NewCachedThreadPool () ؛
service.submit (مكون جديد (مزلاج ، 1)) ؛
Service.Submit (مكون جديد (مزلاج ، 2)) ؛
Service.Submit (مكون جديد (Latch ، 3)) ؛
service.shutdown () ؛
// في انتظار إكمال تهيئة 3 مكونات
latch.await () ؛
// عند اكتمال جميع المكونات الثلاثة المطلوبة ، يمكن أن يستمر الخادم
System.out.println ("الخادم هو UP!") ؛
}
الفراغ الثابت العام (سلسلة [] args) يلقي الاستثناء {
CountDownLatchTest.StartServer () ؛
}
}