下面是提交作业的代码片段。假设我有 3 个线程在运行。 get方法如何等待并获取合适的线程结果。
Future<?> result = threadPool.submitTasks(new Callable<T>() {
public T call() throws Exception {
// do something
}
});
anyType = (T) result.get();
或者假设我的任务 A 结果为 1,任务 B 结果为 2。当涉及到 get 方法时,它返回正确值的保证是什么?
最佳答案
您提交的任务(在本例中为 Callable)被包装到返回的 Future
实例中。从本质上讲,Future
直接与其创建的任务相关,而不是任何其他任务。
在内部,当调用 get
时,future 将尝试获取它与其包装任务共享的锁。一旦获得,它就会查询任务的状态以确定下一步要做什么:
- 如果
Future
被取消,或者底层任务产生异常,则抛出异常 - 否则,返回任务生成的结果。
大体上它是这样工作的,Future
有多种实现,它们都有不同的内部逻辑。
关于java - Future中的get方法在java中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253479/