在Java中,创建线程池可以通过以下几种方法:
1. 使用`Executors`工厂类提供的方法:
`newFixedThreadPool(int n)`:创建一个固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。
`newCachedThreadPool()`:创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收线程,则新建线程。
`newSingleThreadExecutor()`:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
`newScheduledThreadPool(int corePoolSize)`:创建一个可以定时或周期性执行任务的线程池。
2. 使用`ThreadPoolExecutor`类进行自定义创建:
ExecutorService executor = new ThreadPoolExecutor(
int corePoolSize, // 核心池大小
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 空闲线程存活时间
TimeUnit unit, // 时间单位
BlockingQueue
workQueue // 任务队列 );
使用线程池的好处包括提高响应速度、降低资源消耗、便于线程管理等。创建线程池后,可以通过`execute(Runnable command)`方法提交任务执行。
下面是一个使用`newFixedThreadPool`的示例代码:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小为 5 的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 向线程池提交 10 个任务
for (int i = 0; i < 10; i++) {
Runnable task = new MyTask(i);
executor.submit(task);
}
// 关闭线程池
executor.shutdown();
}
}
请根据具体需求选择合适的线程池创建方法。