java类同步_Java中的同步类

java.util.concurrent.CountDownLatch

CountDownLatch会导致一个或多个线程在“门”处等待,直到另一个线程打开此门,此时这些线程可以继续。

构造函数

CountDownLatch(int count):初始化CountDownLatch实例,将其定义为特定的计数。

其他函数

await():强制调用线程等待直到倒数为零。

await(long timeout, TimeUnit unit):同上,只是增加了超时控制。

int getCount():返回当前计数。

void countDown():减少计数,当计数为零时释放所有等待线程。

java.util.concurrent.CyclicBarrier

CyclicBarrier允许一组线程等待彼此到达公共屏障点。这个屏障是循环的,因为它可以在等待的线程被释放之后被重用。此同步器在涉及固定大小线程的应用程序中非常有用,这些线程偶尔必须相互等待。

构造函数

CyclicBarrier(int parties):初始化一个cyclicBarrier,parties表示可以容纳的最大线程数量。

CyclicBarrier(int parties, Runnable barrierAction):barrierAciton表示barrier附带的动作。

换句话说,当(parties-1)个线程正在等待,并且又有一个线程到达时,到达的线程执行barrierAction,然后所有线程继续。

其他函数

await():使线程进入阻塞。

await(long timeout, TimeUnit unit):同上,只是它允许您指定调用线程愿意等待多长时间。

int getNumberWaiting():获取当前正在阻塞的线程数量。

int getParties():返回当前可容纳的最大线程数量。

boolean isBroker():判断barrier是否已经损坏。

reset();重置barrier。

java.util.concurrent.Phaser

public class Phaser extends Object:可重用的同步barrier,与CyclicBarrier和CountDownLatch功能类似,但支持更灵活的使用。除了可以对线程整体控制,还可以对线程(任务)内的不同阶段做同步控制, 甚至,可以将一个大任务划分成小任务,然后在各个小任务之间保持同步。

成员变量 private volatile long state

Phaser状态位,集结了terminated、phase、parties、unarrived的信息,指引每一轮操作。

|63 63 |62 32 |31 16 |15 0|

|-terminated-|-phase-|-parties-|-unarrived parties- |

1、unarrived -- Phaser中未达下一个屏障的信号数量 (bits 0-15)

2、parties --Phaser中注册的信号总数 (bits 16-31)

3、phase -- Phaser中所处的阶段 (bits 32-62)

4、terminated -- 标记Phaser中所有屏障是否已经终止 (bit 63 / sign)

构造函数

Phaser():

Phaser(int parties):

Phaser(Phaser parent):

Phaser(Phaser parent , int parties):

其他方法

int arrive():到达屏障,但不会等待其他任务怒。

int arriveAndAwaitAdvance():到达barrier,并等待其他任务。

int arriveAndDeregister()

int awaitAdvance(int phase)

int awaitAdvanceInterruptibly(int phase)

int awaitAdvanceInterruptibly(int phase, long timeout, TimeUnit unit)

int bulkRegister(int parties):批量注册信号。

int forceTermination()

int getArrivedParties()

Phaser getParent()

int getPhase()

int get RegisteredParties()

Phaser getRoot()

int getUnarrivedParties()

boolean isTerminated()

protected boolean onAdvance(int phase, int registeredParties)

int register():注册一个信号,增加一个paries和一个unarrived parties)。

String toString()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值