并发编程学习笔记之线程池

线程池ThreadPoolExecutor执行原理深入分析

使用线程池的好处:

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

Executor

public interface Executor {
    //在将来的某个时刻在实现类里面通过当前线程、创建新的线程、创建线程池来执行传入的指令。
    void execute(Runnable command);
}

ExecutorService

public interface ExecutorService extends Executor {//有序停止已经启动正在执行的任务,不接受新的任务,若任务已经停止,不受影响。 
  void shutdown(); 
  /** 
  * 尝试停止所有正在执行的任务,停止等待任务的处理,并返回正在等待执行的任务的列表。 
  * 该方法不能等待之前提交的任务执行完,如果需要等待执行,可以使用{@link #awaitTermination awaitTermination} 
  * 从这个方法返回后,这些任务从任务队列中排出(移除)。 除了竭尽全力地停止处理主动执行任务之外,没有任何保证。 
  */ 
  List shutdownNow(); 
  /** 
  * 线程池有没有被关闭,关闭返回true,否则false 
  */ 
  boolean isShutdown(); 
  /** 
  * 如果所有任务在关闭后都完成了。返回true 
  * 提示:如果没有在调用该方法前调用shutdown或者shutdownNow方法,此方法永远不会返回true 
  */ 
  boolean isTerminated(); 
  /** 
  * 在指定时间内阻塞等待任务全部完成,完成了返回true,否则false 
  */ 
  boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException; 
  /** 
  * 提交一个有返回值的任务 
  */ 
   Future submit(Callable task); 
  /** 
  * 提交一个任务来执行,返回一个有返回值的结果,返回值为传入的result 
  */ 
   Future submit(Runnable task, T result); 
  /** 
  * 提交一个任务来执行,返回一个有返回值的结果,返回值为null 
  */ 
  Future submit(Runnable task); 
  /** 
  * 执行一批有返回值的任务 
  * 返回的结果调用{@link Future#isDone}都是true 
  */ 
   List> invokeAll(Collection> tasks) throws InterruptedException;/** 
  * 执行给定的任务,当全部完成或者超时返回一个有状态和结果的Future集合。 
  * 返回的结果调用{@link Future#isDone}都是true 
  * 返回时,尚未完成的任务将被取消。 
  * 如果在进行此操作时修改了给定的集合,则此方法的结果是不确定的。 
  */ 
   List> invokeAll(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException; 
  /** 
  * 执行给定的任务,返回一个成功完成任务的结果(即,没有抛出异常), 
  * 如果有的话。 在正常或异常返回时,尚未完成的任务将被取消。 
  * 如果在进行此操作时修改了给定的集合,则此方法的结果是不确定的。 
  */ 
   T invokeAny(Collection> tasks) throws InterruptedException, ExecutionException; 
  /** 
  * 执行给定的任务,返回一个成功完成任务的结果(即,没有抛出异常), 
  * 如果有的话。 在正常或异常返回时,尚未完成的任务将被取消。 
  * 如果在进行此操作时修改了给定的集合,则此方法的结果是不确定的。 
  * 超时没有成功结果抛出TimeoutException 
  */ 
   T invokeAny(Collection> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;
}


你可能感兴趣的:(并发编程学习笔记之线程池)