Future 和 FutureTask用於接收callable的返回值
例子如下:
package com.company.demo1;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadTask {
public static void main(String[] args) throws Exception {
Task1 task1 = new Task1();
Task2 task2 = new Task2();
Task3 task3 = new Task3();
List<Callable<String>> taskList = Arrays.asList(task1,task2,task3);
ExecutorService executorService = Executors.newFixedThreadPool(3);
//提交單個任務
Future<String> taskFuture = executorService.submit(task1);
//批量提交任務
List<Future<String>> futureList = executorService.invokeAll(taskList);
for (Future<String> future : futureList) {
//獲取執行緒返回的結果
String result = future.get(); //此語句會一直阻塞到結果完成
System.out.println(result);
}
executorService.shutdown();
}
}
class Task1 implements Callable<String> {
@Override
public String call() {
System.out.println("執行緒Task1 開始執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("執行緒Task1 結束執行");
return "1111";
}
}
class Task2 implements Callable<String> {
@Override
public String call() {
System.out.println("執行緒Task2 開始執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("執行緒Task2 結束執行");
return "2222";
}
}
class Task3 implements Callable<String> {
@Override
public String call() {
System.out.println("執行緒Task3 開始執行");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("執行緒Task3 結束執行");
return "3333";
}
}
相關文章
- 搞懂Runnable Callable Future FutureTask 及應用
- Java多執行緒之Callable,Future,FutureTaskJava執行緒
- 大話Android多執行緒(四) Callable、Future和FutureTaskAndroid執行緒
- 執行緒執行 之 Runnable Callable Future ,FutureTask ExcutorService概覽執行緒
- 併發-9-Callable和Future
- 在Java中使用Callable和FutureJava
- Java多執行緒-Callable和FutureJava執行緒
- Runnable,Callable,Future關係淺析
- Java併發程式設計非同步操作Future和FutureTaskJava程式設計非同步
- Java多執行緒帶返回值的Callable介面Java執行緒
- (十三) 說一下runnable 和 callable 有什麼區別?Future是什麼?
- Future和CompletableFuture的理解
- FutureTask的使用
- Python的and和or的返回值Python
- Java併發程式設計-Future系列之Future的介紹和基本用法Java程式設計
- 關於Dart中Future的一些理解Dart
- 老徐和阿珍的故事:Runnable和Callable有什麼不同?
- FutureTask相關
- Akka系列(五):Java和Scala中的FutureJava
- Go的Channel傳送和接收Go
- Callable(簡單)
- Android 基於Netty的訊息推送方案之字串的接收和傳送(三)AndroidNetty字串
- 14.關於Dart中的Future你掌握的夠嗎?Dart
- cin和scanf的返回值知多少
- Express中關於formData物件接收的模組ExpressORM物件
- 對於接收到的GPS資訊詳解
- Java的Future介面Java
- JUC之Callable介面回顧和JUC輔助類
- FutureTask基本操作總結
- Python的函式形參和返回值Python函式
- future promise shared_future簡單使用Promise
- Dart中的Future使用Dart
- Flutter 事件機制 - Future 和 MicroTask 全解析Flutter事件
- 原始碼|使用FutureTask的正確姿勢原始碼
- Lambda Function, Callable, Optional in PythonFunctionPython
- 深入理解Callable介面
- module hmrclient is not a registered callable moduleclient
- PHP 中`Closure`和`Callable`的區別以及在 Redis 訂閱方法中的使用PHPRedis