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()

你可能感兴趣的:(Java中的同步类)