Java 线程池initialze
时间: 2024-09-08 15:03:08 浏览: 97
backlash:React式文字
Java线程池是使用线程池执行提交任务的一种方式,它能够有效地控制线程的最大数量,管理线程的生命周期,并且减少资源消耗。在Java中,线程池可以通过java.util.concurrent.Executor框架来实现,其核心接口是Executor,具体实现包括ExecutorService和ThreadPoolExecutor等。
ThreadPoolExecutor是线程池实现中最灵活的一个,它提供了许多用于配置线程池行为的参数。初始化线程池主要通过其构造函数来完成,构造函数的参数包括:
1. corePoolSize:核心线程数,这是维护的线程池大小,即使它们是空闲的,也会保留在池中。
2. maximumPoolSize:最大线程数,当任务量超过核心线程数处理能力时,线程池会增加工作线程,直到这个上限。
3. keepAliveTime:非核心线程的存活时间,当线程池中的线程数量大于核心线程数时,如果多余的空闲线程空闲时间超过这个值,则会被终止。
4. unit:keepAliveTime参数的时间单位。
5. workQueue:任务队列,用于存放等待执行的任务。
6. threadFactory:用于创建新线程的线程工厂。
7. handler:饱和策略处理器,当队列和最大线程池都满了之后,使用此策略处理新提交的任务。
一个简单的线程池初始化示例如下:
```java
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60;
TimeUnit unit = TimeUnit.SECONDS;
BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>(10);
ThreadFactory threadFactory = Executors.defaultThreadFactory();
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
unit,
workQueue,
threadFactory,
handler
);
// 使用线程池执行任务
for (int i = 0; i < 10; i++) {
final int taskNumber = i;
executor.execute(() -> {
System.out.println("Executing task " + taskNumber);
});
}
// 关闭线程池
executor.shutdown();
}
}
```
在上面的例子中,我们创建了一个核心线程数为5,最大线程数为10的线程池,并指定了一个60秒的非核心线程存活时间。任务队列使用了有界队列LinkedBlockingQueue,线程工厂使用默认的工厂,饱和策略使用了默认的AbortPolicy,意味着当任务被拒绝时会抛出RejectedExecutionException异常。
阅读全文