java线程池callable
时间: 2024-12-27 16:26:53 浏览: 0
### Java 线程池与 `Callable` 接口使用详解
#### Callable接口简介
不同于传统的`Runnable`接口,`java.util.concurrent.Callable<V>`允许任务执行完毕后返回结果,并能抛出异常。这使得处理有返回值的任务更加方便。
#### 创建线程池并提交Callable任务
为了更好地管理和控制并发任务,在Java中通常会借助于`ExecutorService`来创建和管理线程池。下面是一个简单的例子展示了如何定义一个实现了`Callable<Integer>`的类,并将其作为参数传递给线程池的方法之一——submit()来进行异步调用[^1]:
```java
import java.util.concurrent.*;
class Task implements Callable<Integer> {
private int num;
public Task(int n){
this.num=n;
}
@Override
public Integer call(){
try{
Thread.sleep(200); //模拟耗时操作
}catch (InterruptedException e){
System.out.println(e.getMessage());
}
return num * num; // 返回计算的结果
}
}
public class ThreadPoolExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(5);
Future<Integer>[] futures = new Future[3];
for (int i=0;i<3;i++){
futures[i]=executor.submit(new Task(i));
}
for (int j=0;j<futures.length ;j++ ) {
try {
System.out.printf("Task %d result is :%d\n",j,futures[j].get()); // 获取call方法返回值
} catch (ExecutionException | InterruptedException e) {
e.printStackTrace();
}
}
executor.shutdown(); // 关闭线程池
}
}
```
上述代码片段说明了怎样通过`Future<T>`对象跟踪由`Callable`表示的任务的状态及其最终产生的输出。当需要等待某个特定任务完成后再继续下一步逻辑的时候非常有用。
阅读全文