• ThreadPoolExecutor
  • ScheduledThreadPoolExecutor

最佳实践

使用有界队列, 控制线程创建数量

可以使用 guava 来创建

ThreadFactory threadFactory = new ThreadFactoryBuilder()
                        .setNameFormat(threadNamePrefix + "-%d")
                        .build();
ExecutorService threadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MINUTES, workQueue, threadFactory)

线程池预热

  • prestartCoreThread() 启动一个核心线程
  • prestartAllCoreThreads() 启动所有核心线程

有异常, 线程销毁还是复用

“线程池中线程异常后:销毁还是复用?”

  • 使用 execute() 时,未捕获异常导致线程终止,线程池创建新线程替代
  • 使用 submit() 时,异常被封装在 Future 中,线程继续复用。

Libraries

See Also