Java多线程之Future,有返回值的线程

 1 import java.util.concurrent.ExecutorService;
 2 import java.util.concurrent.FutureTask;
 3 import java.util.concurrent.TimeUnit;
 4 
 5 public class Future {
 6 
 7     public static void main(String[] args) throws Exception,InterruptedException {
 8 
 9         java.util.concurrent.FutureTask<Integer> task = new FutureTask<>(() -> {
10             TimeUnit.MILLISECONDS.sleep(5000);
11             return 200;
12         });
13 
14         new Thread(task).start();
15 
16         System.out.println(task.get()); //阻塞 知道线程执行完毕返回结果
17 
18         ExecutorService service = java.util.concurrent.Executors.newFixedThreadPool(5);
19         java.util.concurrent.Future<Integer> result = service.submit(() -> {
20             TimeUnit.SECONDS.sleep(1);
21             return 200;
22         });
23 
24         System.out.println(result.isDone());
25         System.out.println(result.isDone()); //任务执行完没有
26         System.out.println(result.get()); //阻塞等着结果
27         System.out.println(result.isDone());
28 
29         service.shutdown(); //记得关掉线程池不然Java虚拟机不会自己关闭
30     }
31 
32 }
原文地址:https://www.cnblogs.com/mxh-java/p/12246583.html