ThreadPoolTaskExecutor 通知主线程代码示例Future<T> submit
时间: 2024-06-20 18:00:47 浏览: 13
ThreadPoolTaskExecutor是Java并发包中`java.util.concurrent`下的一个组件,它用于在后台线程池中执行任务,而不是直接在主线程中运行。`submit()`方法是`ThreadPoolExecutor`中的一个重要方法,用于提交一个任务到线程池,并返回一个`Future`对象,该对象可以用来获取任务的结果或者检查任务的状态。
以下是一个简单的例子,展示了如何使用`ThreadPoolTaskExecutor`通知主线程:
```java
import java.util.concurrent.*;
public class Main {
private static ExecutorService executor = Executors.newFixedThreadPool(5); // 创建一个固定大小的线程池
public static void main(String[] args) {
Future<String> future = executor.submit(new Callable<String>() { // 使用Callable接口,它可以有返回值
@Override
public String call() throws Exception {
Thread.sleep(2000); // 模拟耗时操作
return "Task result"; // 返回任务结果
}
});
try {
// 主线程阻塞,等待任务完成
System.out.println("主线程开始等待任务结果...");
String result = future.get(); // 获取未来结果
System.out.println("任务结果: " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
// 关闭线程池,防止资源泄露
executor.shutdown();
}
}
}
```
在这个例子中,`submit()`方法将`Callable`任务提交给线程池,主线程不会立即执行这个任务,而是继续运行。当`future.get()`被调用时,主线程会阻塞,直到任务完成后返回结果,或者抛出异常。`get()`方法会阻塞,直到任务完成或超时(默认无限等待)。
相关问题:
1. 为什么要使用`Future`对象来处理任务结果?
2. `Callable`和`Runnable`的区别是什么?
3. 如何设置`Future.get()`的超时时间?
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)