Java线程池概述
线程池是Java多线程编程中的重要概念,用于管理线程的生命周期、减少线程创建和销毁的开销。通过重用线程,线程池能显著提高系统性能,尤其在处理大量短期异步任务时效果明显。Java提供了java.util.concurrent包来支持线程池的实现。
线程池的核心参数
线程池的配置通常涉及以下参数:
- corePoolSize:核心线程数,线程池长期保持的线程数量。
- maximumPoolSize:最大线程数,线程池允许创建的最大线程数量。
- keepAliveTime:非核心线程的空闲存活时间。
- unit:空闲时间的单位(如秒、毫秒)。
- workQueue:任务队列,用于存放待执行的任务。
- threadFactory:线程工厂,用于创建新线程。
- handler:拒绝策略,当任务无法被处理时的处理逻辑。
线程池的创建与使用
Java通过Executors工具类提供了几种常见的线程池创建方式,但更推荐直接通过ThreadPoolExecutor构造函数自定义线程池。
示例:创建固定大小的线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 5; i++) {
final int taskId = i;
executor.execute(() -> {
System.out.println("Task " + taskId + " executed by " + Thread.currentThread().getName());
});
}
executor.shutdown();
}
}
示例:自定义线程池
import java.util.concurrent.*;
public class CustomThreadPoolExample {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // 核心线程数
4, // 最大线程数
60, // 空闲时间
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(2), // 任务队列
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerR
### Java线程池概述
线程池是Java多线程编程中的重要概念,用于管理线程的生命周期、减少线程创建和销毁的开销。通过重用线程,线程池能显著提高系统性能,尤其在处理大量短期异步任务时效果明显。Java提供了`java.util.concurrent`包来支持线程池的实现。
### 线程池的核心参数
线程池的配置通常涉及以下参数:
- **corePoolSize**:核心线程数,线程池长期保持的线程数量。
- **maximumPoolSize**:最大线程数,线程池允许创建的最大线程数量。
- **keepAliveTime**:非核心线程的空闲存活时间。
- **unit**:空闲时间的单位(如秒、毫秒)。
- **workQueue**:任务队列,用于存放待执行的任务。
- **threadFactory**:线程工厂,用于创建新线程。
- **handler**:拒绝策略,当任务无法被处理时的处理逻辑。
### 线程池的创建与使用
Java通过`Executors`工具类提供了几种常见的线程池创建方式,但更推荐直接通过`ThreadPoolExecutor`构造函数自定义线程池。
#### 示例:创建固定大小的线程池
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class FixedThreadPoolExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
for (int i = 1; i <= 5; i++) {
final int taskId = i;
executor.execute(() -> {
System.out.println("Task " + taskId + " executed by " + Thread.currentThread().getName());
});
}
executor.shutdown();
}
}
示例:自定义线程池
import java.util.concurrent.*;
public class CustomThreadPoolExample {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(
2, // 核心线程数
4, // 最大线程数
60, // 空闲时间
TimeUnit.SECONDS,
new ArrayBlockingQueue<>(2), // 任务队列
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerR
1066

被折叠的 条评论
为什么被折叠?



