Phaser:一个可重复使用的同步屏障
作用:提供动态增减parties计数,通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取
消同步运行的效果,支持在制定屏障出等待。
测试代码:
public class TestThreadA extends Thread {
private Phaser phaser;
public TestThreadA(Phaser phaser){
this.phaser = phaser;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+" A1 begin");
phaser.arriveAndAwaitAdvance();
System.out.println(Thread.currentThread().getName()+" A1 end");
}
}
public class MyTest {
public static void main(String[] args) throws InterruptedException{
Phaser phaser = new Phaser(3);
phaser.register();//到达屏障之后线程挂住
for(int i=0;i<3;i++){
TestThreadA testThreadA = new TestThreadA(phaser);
testThreadA.start();
}
phaser.arriveAndDeregister();
}
}
测试结果:
Thread-1 A1 begin
Thread-0 A1 begin
Thread-2 A1 begin
Thread-2 A1 end
Thread-1 A1 end
Thread-0 A1 end