并发-线程并发工具类

2、线程的并发工具类

Fork-Join分支/聚合

什么是分而治之?

规模为N的问题,N<阈值,直接解决,N>阈值,将N分解为K个小规模子问题,子问题互相对立,与原问题形式相同,将子问题的解合并得到原问题的解

动态规范

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1523029453529&di=ba3f47a35f9f3c09470fc84f2244f3a6&imgtype=0&src=http%3A%2F%2Fimages2017.cnblogs.com%2Fblog%2F1218623%2F201708%2F1218623-20170826104001074-1317309267.png

工作密取

workStealing

https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3661592996,39548886&fm=15&gp=0.jpg

Fork/Join使用的标准范式
ForkJoinPool
类 invokeAll递交任务

常用的并发工具类Outline

CountDownLatch(倒计时锁存器)

作用:是一组线程等待其他的线程完成工作以后在执行,加强版join

await()用来等待,countDown()负责计数器的减一(初始化线程完成工作,countDown()方法只扣减一次)扣除点和线程数不一定一致。扣除完毕后,主线程和业务线程才能继续自己工作

CyclicBarrier(篱栅、屏障)

让一组线程达到某个屏障,被阻塞,一直到组内最后一个线程达到屏障时,屏障开放,所有被阻塞的线程会继续运行CyclicBarrier(int parties)

CyclicBarrier(int parties, Runnable barrierAction),屏障开放,barrierAction定义的任务会执行

CountDownLatch和CyclicBarrier辨析

1、countdownlatch放行由第三者控制,CyclicBarrier放行由一组线程本身控制
2、countdownlatch放行条件》=线程数,CyclicBarrier放行条件=线程数

Semaphore(信号量)可以实现数据库连接池

控制同时访问某个特定资源的线程数量,用在流量控制

Exchanger

两个线程间的数据交换,

Callable(可调用)、Future(未来)和FutureTask (未来任务)

isDone,结束,正常还是异常结束,或者自己取消,返回true;

isCancelled 任务完成前被取消,返回true;

cancel(boolean):

  1. 任务还没开始,返回false
  2. 任务已经启动,cancel(true),中断正在运行的任务,中断成功,返回true,cancel(false),不会去中断已经运行的任务
  3. 任务已经结束,返回false

https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1523271543925&di=dc37ee5c8447ce7d30774023dd162a05&imgtype=0&src=http%3A%2F%2Fimages2015.cnblogs.com%2Fblog%2F834468%2F201601%2F834468-20160121000445640-1743054811.png

包含图片和文字的文档的处理:图片(云上),可以用future去取图片,主线程继续解析文字。

猜你喜欢

转载自blog.csdn.net/FMC_WBL/article/details/88604570