Executor架构
2021-04-23 14:58:49 4 举报
Executor及其子接口、子类整体架构
作者其他创作
大纲/内容
extends
impl
1、初始化就需要传入一个Executor,所有功能其实就是基于这个Executor去实现2、与ExecutorService最主要的区别在于submit的task不一定是按照加入时的顺序完成的。CompletionService对ExecutorService进行了包装,内部维护一个保存Future对象的BlockingQueue。只有当这个Future对象状态是结束的时候,才会加入到这个Queue中,take()方法其实就是Producer-Consumer中的Consumer。它会从Queue中取出Future对象,如果Queue是空的,就会阻塞在那里,直到有完成的Future对象加入到Queue中。所以,先完成的必定先被取出。这样就减少了不必要的等待时间
create
CompletionService
1、ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。2、ForkJoinPool 主要用于实现“分而治之”的算法,特别是分治之后递归调用的函数,例如 quick sort 等。3、ForkJoinPool 最适合的是计算密集型的任务,如果存在 I/O,线程间同步,sleep() 等会造成线程长时间阻塞的情况时,最好配合使用 ManagedBlocker。
Executors
AbstractExecutorService
ThreadPoolExecutor
Callable
一个接口,只定义了一个执行任务的方法void execute(Runnable command)
ExecutorService
ShecduledThreadPoolExecutor
ThreadFactory
ShecduledExecutorService
Interface
Executor
1、Executor.execute的真实实现者2、主要有3部分:(1)HashSet<Worker> workers;//线程池(2)BlockingQueue<Runnable> workQueue;//要执行的任务(3)void runWorker(Worker w);//线程池中执行任务
Class
private final class Worker extends AbstractQueuedSynchronizer implements Runnable { Worker(Runnable firstTask) { this.firstTask = firstTask; this.thread = getThreadFactory().newThread(this); } public void run() { runWorker(this);}}
ExecutorCompletionService
ForkJoinPool
1、它申明了几个schedule开头的方法2、ScheduledThreadPoolExecutor是ScheduledExecutorService的具体实现,通过延迟队列与线程池实现了定期执行任务的功能。
收藏
0 条评论
下一页