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 }