java怎么用callable实现线程
时间: 2023-06-17 15:09:07 浏览: 113
使用 `Callable` 接口可以让线程在执行任务后返回一个结果。下面是使用 `Callable` 实现线程的示例:
```java
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
return sum;
}
public static void main(String[] args) {
MyCallable mc = new MyCallable();
FutureTask<Integer> ft = new FutureTask<>(mc);
Thread thread = new Thread(ft);
thread.start();
try {
System.out.println("计算结果:" + ft.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
```
在上面的示例中,`MyCallable` 类实现了 `Callable` 接口,并且实现了 `call()` 方法。该方法中实现了一个简单的加法运算,最后返回计算结果。
在 `main()` 方法中,先创建了一个 `FutureTask` 对象,并将 `MyCallable` 对象作为参数传递给它的构造方法。然后创建了一个新线程,并将 `FutureTask` 对象作为参数传递给它的构造方法。最后,启动新线程并调用 `FutureTask` 对象的 `get()` 方法获取计算结果。
注意,`get()` 方法是一个阻塞方法,它会等待新线程执行完毕并返回结果。如果在等待过程中发生了异常,`get()` 方法会抛出 `ExecutionException` 异常。如果新线程被中断,`get()` 方法会抛出 `InterruptedException` 异常。
阅读全文