在Java中,可以使用java.util.concurrent.Executors
工具类来创建线程池。以下是一些常见的线程池创建方式:
- 固定大小的线程池(Fixed Thread Pool):
创建一个定长的线程池,可控制线程最大并发数,超出的任务将在队列中等待。
ExecutorService executor = Executors.newFixedThreadPool(int nThreads);
其中,nThreads
是你想要设置的核心线程数量。
- 单个后台线程池(Single Thread Executor):
只有一个工作线程的线程池,所有任务按照提交顺序执行。
ExecutorService executor = Executors.newSingleThreadExecutor();
- 可缓存的线程池(Cached Thread Pool):
线程池的数量会根据需要动态调整,如果线程空闲超过60秒,则会被终止回收,新任务进来时再新建线程,适合处理大量短生命周期的任务。
ExecutorService executor = Executors.newCachedThreadPool();
- 定长定时线程池(Scheduled Thread Pool):
可以定期或周期性地执行任务的线程池。
ScheduledExecutorService scheduledExecutor = Executors.newScheduledThreadPool(int corePoolSize);
这种线程池主要用于执行定时任务和具有固定延迟的任务。
- 自定义线程池:
如果上述提供的线程池无法满足需求,可以通过ThreadPoolExecutor
类直接构造,以便更精确地控制线程池的行为,包括核心线程数、最大线程数、存活时间、阻塞队列等。
ThreadPoolExecutor executor = new ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler
);
请注意,在程序结束或者不再使用线程池时,应调用 executor.shutdown()
或 executor.shutdownNow()
来关闭线程池并释放资源。