ThreadPoolExecutor有哪些创建线程池的工厂类型

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

在Java的java.util.concurrent包中,ThreadPoolExecutor类是一个强大的线程池实现,它提供了几种工厂方法来创建预配置的线程池。以下是几种常用的工厂类型,它们都是Executors类中的静态方法:

1. FixedThreadPool

固定大小的线程池。所有线程都在共享的无界队列中运行。在这种类型的线程池中,线程数量是固定的,即使有线程因异常结束,也会创建新线程来替代,保持池的大小不变。

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(int nThreads);

2. CachedThreadPool

可缓存的线程池。这种类型的线程池会根据需要创建新线程,但如果线程空闲超过60秒,则会被回收。这种类型的线程池通常适用于执行大量短期异步任务。

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

3. SingleThreadExecutor

单线程执行器。这种类型的线程池只有一个工作线程来执行任务。它保证所有任务都在同一个线程中按顺序执行。

ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();

4. ScheduledThreadPool

计划任务线程池。这种类型的线程池可以在给定的延迟后运行任务,或者定期执行任务。

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(int corePoolSize);

5. SingleThreadScheduledExecutor

单线程计划任务执行器。这是ScheduledThreadPool的变体,它保证所有定时任务都在同一个线程中按顺序执行。

ScheduledExecutorService singleThreadScheduledExecutor = Executors.newSingleThreadScheduledExecutor();

6. WorkStealingPool (Java 8+)

工作窃取线程池。这种类型的线程池基于Fork/Join框架,适用于大量短期异步任务。线程池中的线程会尝试从其他线程的队列中窃取任务来执行。

ExecutorService workStealingPool = Executors.newWorkStealingPool(int parallelism);

使用这些工厂方法可以快速创建线程池,但是它们提供的都是预设的配置。如果需要更细粒度的控制,可以直接使用ThreadPoolExecutor的构造函数来创建线程池,并手动指定核心池大小、最大池大小、存活时间、工作队列等参数。

最后更新于