我试图了解 aCallable
在不同线程上运行时如何返回值。
我正在查看包中所有可用的 classes Executors
、和AbstractExecutorService
, 。 ThreadPoolExecutor
FutureTask
java.util.concurrent
您可以通过调用 Executors 中的方法来创建一个 ExecutorService 对象(例如newSingleThreadExecutor()
)。然后你可以传递一个 Callable 对象 ExecutorService.submit(Callable c)
。
由于该call()
方法是由 提供的线程运行的ExecutorService
,返回的对象在哪里“跳转”回调用线程?
看这个简单的例子:
1 ExecutorService executor = Executors.newSingleThreadExecutor();
2 public static void main(String[] args) {
3 Integer i = executor.submit(new Callable<Integer>(){
4 public Integer call() throws Exception {
5 return 10;
6 }
7 }).get();
8 System.out.print("Returns: " + i + " Thread: " + Thread.currentThread.getName());
9 // prints "10 main"
10 }
由单独线程运行的 call 方法中的整数怎么可能返回到 Integer 对象(第 3 行),以便可以由System.out
主线程中的语句(第 7 行)打印?
主线程是否可能在ExecutorService
运行其线程之前运行,以便System.out statement
打印为空?