Java 线程池创建和使用
时间: 2024-10-21 16:17:31 浏览: 48
JAVA线程池的分析和使用
在Java中,线程池是一种管理线程的技术,它可以复用已经存在的线程,而不是每次都创建新的线程,从而提高程序性能、降低资源消耗。以下是创建和使用Java线程池的基本步骤:
1. **创建线程池**:
- 使用`java.util.concurrent`包下的`ThreadPoolExecutor`类,可以指定核心线程数(最小线程数,保证立即处理请求)、最大线程数(最多同时运行的线程数)、任务队列(存储待处理的任务)以及线程工厂(用于创建新线程)。
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize, // 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 空闲时间,超过这个时间未执行的任务会被放入缓存
TimeUnit.MILLISECONDS, // 时间单位
workQueue, // 任务队列
threadFactory, // 线程工厂
handler // 容纳策略,默认阻塞等待
);
```
2. **提交任务**:
使用`execute()`方法将Runnable任务或Callable任务添加到线程池。如果是Callable任务,还可以获取Future对象以获取结果或检查是否已完成。
```java
executor.execute(runnableTask); // Runnable任务
executor.submit(callableTask); // Callable任务,返回Future对象
```
3. **关闭线程池**:
当不再需要线程池时,调用`shutdown()`来停止接受新任务,已有的任务继续执行直到完成,然后会抛出RejectedExecutionException异常。如果希望优雅地结束,可以使用`shutdownNow()`强制中断正在运行的任务并关闭线程池。
```java
executor.shutdown(); // 非阻塞
// 或者
executor.shutdownNow(); // 强制中断并关闭
```
阅读全文