传统线程两种实现方式的确定无法获取线程结果
&& Callable与Runnable接口对比:
Callable是一个泛型
&& Future 接口
future :可以查询任务是否取消,取消任务,查询是否完成,获取结果
future可以得到其他线程执行结果的返回值
&& FutureTask 类
父类是:Runnable, future
可以像runnable作为线程执行,也可以像future返回线程执行的结果
7.3 Fork/Join 框架
将大任务分割成若干个小任务,最后汇总
工作窃取算法
工作窃取算法是指:某个线程从其他队列里窃取任务来执行
双端队列: 被窃取任务的线程从双端队列的头部拿任务执行
窃取任务的线程从双端队列的尾部拿任务执行
充分利用了线程进行并行计算
存在竞争:消耗了系统资源,创建了线程,多个队列
局限:
1 任务只能使用fork/join 实现同步机制
2 任务不应该执行io
3 任务不能抛出检查异常
ForkJoinPool :负责实现,工作窃取算法,管理工作线程,已经任务的状态
ForkJoinTask: 负责提供Join Fork 执行的机制
8.4 BlockingQueue
&& ArrayBlockingQueue 有界的阻塞队列,内部实现是数组 先进先出
&& DelayQueue 元素需要排序 定时关闭连接,缓存对象 超时处理
&& LinkedBlockingQueue 内部实现是链表 先进先出
&& PriorityBlockingQueue 带优先级的队列,没有边界 ,有排序规则 插入的对象必须实现Comparable接口
&& SynchronousQueue 只存储一个对象