คัดลอกรหัสรหัส ดังต่อไปนี้:
TestCyclicBarrier คลาสสาธารณะ {
int สุดท้ายคงที่ส่วนตัว THREAD_NUM = 5;
WorkerThread คลาสคงที่สาธารณะใช้งาน Runnable {
สิ่งกีดขวาง CyclicBarrier;
WorkerThread สาธารณะ (CyclicBarrier b) {
นี่.สิ่งกีดขวาง = b;
-
@แทนที่
โมฆะสาธารณะวิ่ง () {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
พยายาม{
System.out.println("พนักงานกำลังรออยู่");
//เธรดจะรออยู่ที่นี่จนกว่าเธรดทั้งหมดจะถึงแผงกั้น
สิ่งกีดขวาง.รอ();
System.out.println("ID:"+Thread.currentThread().getId()+" ทำงาน");
} จับ (ข้อยกเว้นจ) {
e.printStackTrace();
-
-
-
-
* @param args
-
โมฆะคงที่สาธารณะ main (String [] args) {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
CyclicBarrier cb = CyclicBarrier ใหม่ (THREAD_NUM, Runnable ใหม่ () {
//ดำเนินการเมื่อเธรดทั้งหมดถึงอุปสรรค
@แทนที่
โมฆะสาธารณะวิ่ง () {
// TODO ต้นขั้ววิธีการสร้างอัตโนมัติ
System.out.println("สิ่งกีดขวางภายใน");
-
-
สำหรับ(int i=0;i<THREAD_NUM;i++){
เธรดใหม่ (WorkerThread ใหม่ (cb)). เริ่มต้น ();
-
-
-
-
นี่คือผลลัพธ์:
คนงานรออยู่
คนงานรออยู่
คนงานรออยู่
คนงานรออยู่
คนงานรออยู่
ภายในบาเรีย
รหัส:12 ทำงาน
รหัส:8 ทำงานอยู่
รหัส:11 ทำงาน
รหัส:9 ทำงานอยู่
รหัส:10 ทำงาน
-
1. ระบุตัวเลขเมื่อ CyclicBarrier ถูกเตรียมใช้งาน แล้วคำนวณจำนวนเธรดที่เรียก CyclicBarrier.await() เพื่อรอ เมื่อจำนวนเธรดถึงจำนวนนี้ เธรดทั้งหมดที่เข้าสู่สถานะรอจะถูกปลุกและดำเนินการต่อ
2. CyclicBarrier ดังที่ชื่อบอกไว้ ถือเป็นสิ่งกีดขวางได้
3. CyclicBarrier ยังสามารถรับพารามิเตอร์ Runnable ได้ในขั้นต้น ภารกิจ Runnable นี้จะถูกดำเนินการหลังจากถึงจำนวน CyclicBarriers และก่อนที่เธรดอื่นๆ ทั้งหมดจะถูกปลุกขึ้นมา