===== 核心模型 =====
* 一个线程安全的队列,用于存放任务。
* RunnableFuture类型。返回一个Future用于查询任务完成状态。
* 多个线程,并行处理处理任务
* 从队列中获取任务
* 执行任务
* 设置任务的完成状态
创建线程池时。里面的线程是懒创建的。所以如果需要,可以先预热。
===== 注意点 =====
* 线程个数
* 线程允许空闲时间
* 队列长度
* 队列满了之后的策略
* ThreadPoolExecutor.AbortPolicy()这种策略直接抛出异常,丢弃任务。
* ThreadPoolExecutor.CallerRunsPolicy()线程调用运行该任务的 execute 本身(运行线程池的主线程)。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度
* ThreadPoolExecutor.DiscardOldestPolicy()如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)
* ThreadPoolExecutor.DiscardPolicy()不能执行的任务将被删除
Future 任务超时之后,依然会被执行,除非显示调用的 future.cancle()。线程池执行future任务时会先判断该任务的状态,如果任务没有没cancel或者interrupt,才会执行任务。