ExecutorService 使用
时间: 2024-10-30 12:05:43 浏览: 12
`ExecutorService` 是Java并发包中的一个重要组件,它是处理大量并发任务的高级API,提供了一种更简洁、可管理的方式来执行异步计算。它包含以下几个关键功能:
1. **线程池管理**:创建一个`ExecutorService`实例时,可以选择创建固定大小、可缓存的线程池,或者是单线程阻塞队列等不同类型,这有助于避免频繁创建销毁线程带来的开销。
2. **提交任务**:通过`submit()`方法提交一个`Runnable`或`Callable`任务到线程池,这个方法会立即返回一个`Future`对象,你可以使用这个对象查询任务是否完成、取消任务或获取结果。
3. **线程调度**:`ExecutorService`内部有调度策略,可以根据任务的特性(例如优先级、可否中断等)自动调整线程的执行顺序。
4. **动态调整**:`shutdown()`方法可以让线程池停止接受新的任务,`awaitTermination()`则可以让主线程等待所有任务完成后关闭。
5. **错误处理**:如果线程在执行过程中抛出未捕获的异常,`ExecutorService`默认不会停止运行,但它会把异常记录下来,直到整个服务关闭时才暴露出来。
以下是使用`ExecutorService`的一个简单示例:
```java
ExecutorService executor = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池
// 提交任务
Future<Integer> future = executor.submit(new IntegerCalculator(10, 20));
try {
int result = future.get(); // 如果任务成功,这里会得到结果
System.out.println("Result is " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
// 关闭线程池
executor.shutdown();
```
阅读全文