📄 barrier.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 Barrier {
/***
* 需要进行同步的线程数量,都到到达屏障的数量
* **/
private int threadWaitCount;
private String barrierName;
public Barrier(int threadCount) {
threadWaitCount = threadCount;
}
public void setBarrierName(String s){
barrierName =s;
}
/**
* 等待其他线程运行完毕
* 这个算法实际上还可以进一步完善,这里没有考虑到一个线程重复调用waitForRestThread方法的情形
* 可以把已经进入等待状态的线程记录下来,当再次调用waitForRestThread这个方法时候,作一下判断
* 如果已经被记录,不作处理;如果没有记录,就记录下来,并且计数器减1。
* ***/
public synchronized void waitForRestThread(){
//有新的线程进入等待,计数器减1
threadWaitCount --;
if (threadWaitCount<=0){
System.err.println(barrierName+", 线程汇集完毕,所有线程都达到屏障了! ");
}
//一直循环等待所有线程运行完毕,都进入等待状态
while(threadWaitCount>0){
try {
wait();
}
catch (Exception ex) {
//freeAll();
}
}
//所有线程都已经达到屏障,同步完成,通知各个线程
freeAll();
}
/**
* 通知所有等待的线程
* **/
public synchronized void freeAll(){
notifyAll();
}
public static void main(String[] args) {
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -