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 方法时,如何保证它返回正确的值?
您提交的任务(在本例中为 Callable)被包装到返回的Future. 本质上,与为其创建的任务直接相关Future,而不是任何其他任务。
在内部,当调用 时get,future 将尝试获取与其包装任务共享的锁。一旦获取,它就会查询任务的状态以确定下一步要做什么:
Future被取消,或者基础任务生成异常,则抛出异常这就是它的工作原理,有多种实现Future,它们都有不同的内部逻辑。