package com.jikuan.zjk.future;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
/**
* 試驗 Java 的 Future 用法
* jikuan.zjk
*/
public class FutureTest {
public static class Task implements Callable<String> {
public String call() throws Exception {
String tid = String.valueOf(Thread.currentThread().getId());
System.out.printf("Thread#%s : in call\n", tid);
return tid;
}
}
static Callable<Integer> test3 = new Callable<Integer>() {
public Integer call() throws Exception {
return new Random().nextInt(100);
}
};
public static void main(String[] args) throws InterruptedException, ExecutionException {
// test 1
List<Future<String>> results = new ArrayList<Future<String>>();
ExecutorService es = Executors.newCachedThreadPool();
for (int i = 0; i < 100; i++)
results.add(es.submit(new Task()));
// get是阻塞的,等待有返回到Future中才會繼續
for (Future<String> res : results)
System.out.println(res.get());
// test 2
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<Integer> future = threadPool.submit(new Callable<Integer>() {
public Integer call() throws Exception {
return new Random().nextInt(100);
}
});
System.out.println(future.get());
// test 3
ExecutorService fixThreadPool = Executors.newFixedThreadPool(1);
Future<Integer> future2 = fixThreadPool.submit(test3);
System.out.println(future2.get());
}
}
java future併發獲得返回值示例
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.