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

标签 java multithreading concurrency

下面是提交作业的代码片段。假设我有 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 将尝试获取它与其包装任务共享的锁。一旦获得,它就会查询任务的状态以确定下一步要做什么:

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

大体上它是这样工作的,Future 有多种实现,它们都有不同的内部逻辑。

关于java - Future中的get方法在java中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253479/

相关文章:

java - 为什么 Java 8 提供方法引用?

java - Spring Data Mongo + 延迟加载 + REST Jackson

c++ - 多个线程写入同一个套接字导致问题

c# - ThreadSafe LinkedList实现

ios - 与核心数据并发

java - 为什么当 Future 抛出这个 OutOfMemoryError 时没有出现?

concurrency - Celery: worker 数量与并发性

java - 无法在 postgresql 中使用 AND 运算符更新数据库中的值

Java:向不同的 Activity 发送 Intent

java - 定向notifyAll()