📄 barrieruseexample.java
字号:
package thread.lock;
/**
* <p>Title:线程之间的同步工具--屏障 </p>
*
* <p>Description:线程之间的同步工具--屏障。
* 屏障就是这样的一个等待点: 一组线程在这一点被同步,这些线程合并各自的结果或者运行到整个任务的下一阶段。
* </p>
*
* <p>Copyright: Copyright (c) 2004</p>
*
* <p>Company: netsky</p>
*
* @author wdz123@hotmail.com
* @version 1.0
* @see <<Java线程>> O'reilly 中国电力出版社 ISBN 7-5083-1318-6 2003年出版
*/
public class BarrierUseExample
extends Thread {
private Barrier firstBarrier,secondBarrier,thirdBarrier;
private Object processResult;
public BarrierUseExample(Barrier b1,Barrier b2,Barrier b3) {
firstBarrier = b1;
secondBarrier = b2;
thirdBarrier = b3;
processResult = new Object();
}
public void run(){
try {
//所有线程在这里进行第1次同步
firstBarrier.waitForRestThread();
//各个线程开始处理第1阶段任务
doPhaseOne();
//所有线程在这里进行第2次同步
secondBarrier.waitForRestThread();
//每一个线程开始处理第2阶段的任务
doPhaseTwo();
//所有线程在这里进行第3次同步
thirdBarrier.waitForRestThread();
//每一个线程开始处理第3阶段的任务
doPhaseThree();
}
catch (Exception ex) {
}
}
/***
* 第一阶段任务处理
* **/
public void doPhaseOne(){
//processResult
System.err.println(this.getName()+" --第一阶段任务处理... ");
}
/***
* 第2阶段任务处理
* **/
public void doPhaseTwo(){
//processResult
System.err.println(this.getName()+" --第2阶段任务处理... ");
}
/***
* 第3阶段任务处理
* **/
public void doPhaseThree(){
//processResult
System.err.println(this.getName()+" --第3阶段任务处理... ");
}
public static void main(String[] args) {
//构建3个屏障对象
Barrier [] br= new Barrier[3];
for (int i=0;i<3;i++){
///有5个线程需要同步控制
br[i] = new Barrier(5);
br[i].setBarrierName("屏障"+i);
}
//需要被处理数据
//构建5个线程
BarrierUseExample [] t =new BarrierUseExample[5];
for (int i=0;i<=4;i++){
t[i] = new BarrierUseExample(br[0],br[1],br[2]);
t[i].setName("thread"+i);
t[i].start();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -