1.CountDownLatch
- 作用:是一组线程等待其他的线程完成工作以后再执行,加强版join
await用来等待,countDown负责计数器的减一
ch1 数据库连接池例子中有用到
UseCountDownLatch.java
2.CycliBarrier
- 让一组线程达到某个屏障,被阻塞,一直到组内最后一个线程达到屏障时,屏障开放,所有被阻塞的线程会继续运行CyclicBarrier(int parties)
CyclicBarrier(int parties, Runnable barrierAction),屏障开放,barrierAction定义的任务会执行
UseCyclicBarrier.java - CountDownLatch和CyclicBarrier辨析
1、countdownlatch放行由第三者控制,CyclicBarrier放行由一组线程本身控制
2、countdownlatch放行条件>=线程数,CyclicBarrier放行条件=线程数
3.Semaphore
- 控制同时访问某个特定资源的线程数量,用在流量控制
注意对可用资源、已经占用的资源都需要进行流量控制,因为这两部分都是共享的!
Semaphore 数据库连接池流控实现
流控实现类DBPoolSemaphore.java
测试类AppTest.java
4.Exchanger
- 两个线程间的数据交换
UseExchanger.java
5.Callable、Future和FutureTask
- isDone,结束,正常还是异常结束,或者自己取消,返回true;
isCancelled 任务完成前被取消,返回true; - cancel(boolean):
1、 任务还没开始,返回false
2、 任务已经启动,cancel(true),中断正在运行的任务,中断成功,返回true,cancel(false),不会去中断已经运行的任务
3、 任务已经结束,返回false - 使用示例:包含图片和文字的文档的处理:图片(云上),可以用future去取图片,主线程继续解析文字。
FutureTask示例UseFuture.java
参考
- 1)享学课堂Mark老师笔记