executors创建线程池
时间: 2025-06-29 20:01:44 浏览: 6
### Java Executors 创建线程池
#### 使用 `newCachedThreadPool` 创建线程池
此方法会创建一个可根据需要创建新线程的线程池,并在之前构造的线程不再使用时将其终止。在线程空闲 60 秒之后,这些线程会被回收重用。
```java
public static void main(String[] args) {
// 创建一个可缓存的线程池
ExecutorService executorService = Executors.newCachedThreadPool();
// 循环创建10个线程并提交给线程池执行
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
executorService.submit(() -> {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("使用 newCachedThreadPool-->创建线程:" + Thread.currentThread().getName());
});
}
// 关闭线程池
executorService.shutdown();
}
```
上述代码展示了如何利用 `Executors.newCachedThreadPool()` 来构建一个能够动态调整大小的线程池[^3]。
#### 使用 `newFixedThreadPool` 创建固定大小的线程池
该方式允许指定固定的线程数量,超出的任务会在队列中等待直至有可用资源处理它们。
```java
// 定义核心线程数为5
ExecutorService fixedPool = Executors.newFixedThreadPool(5);
for(int i=0;i<10;i++){
final int taskIndex=i;
fixedPool.execute(new Runnable(){
@Override
public void run() {
System.out.println("Task "+taskIndex+" is running on thread "+Thread.currentThread().getName());
}
});
}
fixedPool.shutdown();
```
需要注意的是,由于此类线程池采用无边界的工作队列,因此存在潜在风险——如果任务提交速度远超完成速率,则可能导致内存溢出问题[^4]。
#### 单一线程化调度程序:`newSingleThreadExecutor`
这种类型的线程池仅包含单一工作线程;它保证所有任务按先进先出原则串行执行,即每次只有一个活动中的任务被执行。
```java
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
singleThreadExecutor.submit(() -> {
System.out.println("Executing tasks using Single Threaded Pool");
});
singleThreadExecutor.shutdown();
```
这种方式适用于那些希望确保一系列操作严格依次发生的场景下[^2]。
#### 带定时功能的线程池:`newScheduledThreadPool`
为了支持周期性的计划任务或是延迟执行特定动作的需求,可以选用带有调度能力的新建线程池方案:
```java
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(4);
Runnable command = () -> System.out.println("Scheduling: " + System.currentTimeMillis());
scheduledExecutorService.scheduleAtFixedRate(command, 0, 1, TimeUnit.SECONDS);
```
这里定义了一个由四个内核组成的带调度特性的线程池实例,它可以用来安排命令以固定频率重复运行[^1]。
阅读全文
相关推荐

















