多线程笔记(一)Future
1. Future 和 FutureTask 获取返回结果
都是调用 ExecutorService 的 submit 方法,不同的是一个 submit Callable,返回值用 Future 接收;另一个 submit FutureTask,也就是 Runnable,不需要接收返回值
1 // 使用 Future,MyTask 是一个 Callable 的实现类 2 ExecutorService executorService = Executors.newCachedThreadPool(); 3 MyTask task = new MyTask(); 4 5 Future<Integer> result = executorService.submit(task); 6 executorService.shutdown();
FutureTask:
1 // 使用 FutureTask 2 ExecutorService executorService = Executors.newCachedThreadPool(); 3 MyTask myTask = new MyTask(); 4 FutureTask<Integer> futureTask = new FutureTask<>(myTask); 5 executorService.submit(futureTask); 6 executorService.shutdown();
由于 FutureTask 是一个 Runnable,所以也可以用 Thread 起一个线程,结果是一样的:
1 MyTask myTask = new MyTask(); 2 FutureTask<Integer> futureTask = new FutureTask<>(myTask); 3 4 new Thread(futureTask).start();
参考: