Future中的get方法在java中是如何工作的?

Vij*_*Ram 3 java concurrency multithreading

下面是提交作业的代码片段。假设我有 3 个线程正在运行。get方法如何等待并获取适当的线程结果。

Future<?> result = threadPool.submitTasks(new Callable<T>() {
            public T call() throws Exception {
                // do something
        }

});
anyType = (T) result.get(); 
Run Code Online (Sandbox Code Playgroud)

或者假设我的任务 A 结果为 1,任务 B 结果为 2。当涉及到 get 方法时,如何保证它返回正确的值?

Per*_*ion 5

您提交的任务(在本例中为 Callable)被包装到返回的Future. 本质上,与为其创建的任务直接相关Future,而不是任何其他任务。

在内部,当调用 时get,future 将尝试获取与其包装任务共享的锁。一旦获取,它就会查询任务的状态以确定下一步要做什么:

  1. 如果任务Future被取消,或者基础任务生成异常,则抛出异常
  2. 否则,返回任务生成的结果。

这就是它的工作原理,有多种实现Future,它们都有不同的内部逻辑。