主线程中返回两个以上的子线程的值可以用Callable实现吗
时间: 2023-06-14 20:06:59 浏览: 89
使用Runnable模拟Callable接口实现线程有返回值
5星 · 资源好评率100%
是的,可以使用`Callable`和`Future`来实现主线程中返回两个以上的子线程的值。具体步骤如下:
1.定义一个类实现`Callable`接口,并实现`call`方法来完成子线程的任务。
2.创建一个`ExecutorService`对象,调用`submit`方法提交子线程任务,并返回一个`Future`对象。
3.调用`Future`对象的`get`方法来获取子线程的返回值。
示例代码如下:
```java
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 创建一个ExecutorService对象
ExecutorService executor = Executors.newFixedThreadPool(2);
// 提交子线程1的任务
Future<Integer> future1 = executor.submit(new Task1());
// 提交子线程2的任务
Future<String> future2 = executor.submit(new Task2());
// 获取子线程1的返回值
int result1 = future1.get();
System.out.println("子线程1的返回值为:" + result1);
// 获取子线程2的返回值
String result2 = future2.get();
System.out.println("子线程2的返回值为:" + result2);
// 关闭ExecutorService
executor.shutdown();
}
}
// 子线程1的任务
class Task1 implements Callable<Integer> {
@Override
public Integer call() throws Exception {
return 100;
}
}
// 子线程2的任务
class Task2 implements Callable<String> {
@Override
public String call() throws Exception {
return "Hello World";
}
}
```
在上面的示例代码中,`Task1`和`Task2`类分别实现了`Callable`接口,并且分别完成了子线程1和子线程2的任务。通过`ExecutorService`的`submit`方法分别提交了这两个任务,并返回了`Future`对象。在主线程中,调用`Future`对象的`get`方法获取子线程的返回值,并输出到控制台。最后,关闭`ExecutorService`。
阅读全文