如何结合ExecutorService不阻塞使用Future
时间: 2023-08-02 19:35:46 浏览: 125
可以使用ExecutorService.submit方法返回的Future对象来实现非阻塞式的任务执行和结果获取。
具体实现步骤如下:
1. 创建ExecutorService实例。
2. 使用submit方法提交任务,它将返回一个Future对象。
3. 使用Future对象的isDone方法判断任务是否完成。
4. 如果任务已经完成,使用Future对象的get方法获取任务执行结果。
5. 如果任务未完成,可以使用Future对象的cancel方法取消任务。
下面是一个示例代码:
```java
ExecutorService executorService = Executors.newFixedThreadPool(1);
Future<String> future = executorService.submit(() -> {
//模拟一个耗时任务
Thread.sleep(3000);
return "Hello World";
});
//检查任务是否完成
while (!future.isDone()) {
System.out.println("Task is not yet completed...");
Thread.sleep(500);
}
//获取任务结果
String result = future.get();
System.out.println(result);
executorService.shutdown();
```
在这个示例中,我们使用了一个固定大小为1的线程池来执行一个耗时3秒的任务。使用Future对象的isDone方法检查任务是否完成,如果未完成,则等待500毫秒后再次检查。当任务完成后,使用Future对象的get方法获取任务结果。最后,我们关闭线程池。
阅读全文