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