用户工具


核心模型

  • 一个线程安全的队列,用于存放任务。
    • RunnableFuture类型。返回一个Future用于查询任务完成状态。
  • 多个线程,并行处理处理任务
    • 从队列中获取任务
    • 执行任务
    • 设置任务的完成状态

创建线程池时。里面的线程是懒创建的。所以如果需要,可以先预热。

注意点

  • 线程个数
  • 线程允许空闲时间
  • 队列长度
  • 队列满了之后的策略
    • ThreadPoolExecutor.AbortPolicy()这种策略直接抛出异常,丢弃任务。
    • ThreadPoolExecutor.CallerRunsPolicy()线程调用运行该任务的 execute 本身(运行线程池的主线程)。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度
    • ThreadPoolExecutor.DiscardOldestPolicy()如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)
    • ThreadPoolExecutor.DiscardPolicy()不能执行的任务将被删除

Future 任务超时之后,依然会被执行,除非显示调用的 future.cancle()。线程池执行future任务时会先判断该任务的状态,如果任务没有没cancel或者interrupt,才会执行任务。