Phaser API的使用

Phaser 方法

int arriveAndAwaitAdvance(); 当前线程到达屏障parties值加1,在此等候条件满足后再向下一个屏障运行,条件不满足时线程呈现阻塞状态。
int arriveAndDeregister(); parties值减一;
int getPhase();获取已经到达第几个屏障;
boolean onAdvance(int phase, int registeredParties);通过新屏障的时候调用。返回true则屏障不等待,Phaser呈现无效/销毁状态,返回false则Phaser继续工作。

Phaser phaser = new Phaser(3) {
   
   
			@Override
			protected boolean onAdvance(int phase, int registeredParties) {
   
   
				 System.out.println("onAdvance方法被调用");
				return true;
			}
		};

int getRegisteredParties();获得注册的parties值;
int register();parties值 动态添加1;
int bulkRegister(int parties); 批量增加parties值;
int getArrivedParties();获得已经被使用了的parties个数。
getUnarrivedParties(); 获得没有被使用的parties个数。
int arrive(); parties值加1,并且不在屏障处等待(调用线程),直接执行下面代码。经过屏障后parties计数会被重置为0;其他线程不满足计数条件是还是呈现等待状态。
int awaitAdvance(int phase) ; 传入参数phase值和当前getPhase()方法返回值一样,则在屏障处等待,否则继续向下运行。注意:方法不参与parties值得计数操作,只具有判断功能。还是线程不可中断的。
int awaitAdvanceInterruptibly(int phase); 传入参数phase值和当前getPhase()方法返回值一样就等待,否则就继续执行下面的代码。线程时可中断的。
int awaitAdvanceInterruptibly(int phase, long timeout, TimeUnit unit);在指定的屏障数最大等待指定的时间,指定时间内屏障数未变则抛出异常。
void forceTermination(); 使Phaser屏障功能失效。
boolean isTerminated(); 判断Phaser对象是否已经呈现销毁状态。

awaitAdvance()

public class ThreadA extends Thread{
   
   

	private Phaser phaser;
	
	public ThreadA(Phaser phaser) {
   
   
		super();
		this.phaser = phaser;
	}

	@Override
	public void run() {
   
   
		 System.out.println(Thread.currentThread().getName()+" 开始 "+System.currentTimeMillis());
		 phaser.arriveAndAwaitAdvance();
		 System.out.println(Thread.currentThread().getName
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值