Executor框架

一,Executor,ExecutorService,Executors
  • 1,Executors
    java.util.concurrent提供了一种灵活的线程池实现作为Executor框架的一部分.在java类库中,任务执行的主要抽象不是Thread,而是Executor.
    ** Executor提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法**。通常使用 Executor 而不是显式地创建线程。
public interface Executor {
    void execute(Runnable command);
}
  • 2,ExecutorService
    为了解决执行服务的生命周期,ExecutorService接口扩展了Executor接口,添加了一些用于生命周期管理的方法
public interface ExecutorService extends Executor {
  //平缓的关闭过程:不接受新的任务,同时等待已经提交的任务完成(包括哪些还没有开始执行的任务
    void shutdown();
//执行粗暴的关闭过程:他将尝试取消所有运行中的任务,并且不再启动队列中尚未开始执行的任务
    List shutdownNow();

    boolean isShutdown();

    boolean isTerminated();

    boolean awaitTermination(long timeout, TimeUnit unit)
        throws InterruptedException;

     Future submit(Callable task);
 
     Future submit(Runnable task, T result);

    Future submit(Runnable task);
  
     List> invokeAll(Collection> tasks)
        throws InterruptedException;

     List> invokeAll(Collection> tasks,
                                  long timeout, TimeUnit unit)
        throws InterruptedException;

     T invokeAny(Collection> tasks)
        throws InterruptedException, ExecutionException;

     T invokeAny(Collection> tasks,
                    long timeout, TimeUnit unit)
        throws InterruptedException, ExecutionException, TimeoutException;
}
  • 3,Executors
    Executor框架的一个工具类
Executor框架_第1张图片
Executor框架.png
二,线程池
  • newFixedThreadPool
    newFixedThreadPool创建一个固定长度的线程池,每当提交一个任务时就创建一个线程,直到达到线程池的最大数量,这时线程池的规模将不再变化.如果某个线程由于发生了未预期的Excepiton而结束,那么线程池会补充一个新的线程

  • newCachedThreadPool
    newCachedThreadPool将创建一个可缓存的线程池,如果线程池的当前规模超过了处理请求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模不存在任何限制

  • newSingleThreadExecutor
    newSingleThreadExecutor是一个单线程的Executor,他创建单个工作者线程来执行任务,如果这个线程异常结束,会创建另一个线程来替代. newSingleThreadExecutor确保按照任务在队列中的顺序来串行执行

  • newScheduledThreadPool
    newScheduledThreadPool创建了一个固定长度的线程池,而且以延迟或定时的方式来执行任务.

参考:
<>

你可能感兴趣的:(Executor框架)