java - 如何使用runner来运行FutureTask<V>中的Callable

标签 java futuretask

source code of FutureTask<V> ,有一个volatile 实例变量 Thread runner ,其中注释表明它是运行可调用对象的线程。然而,runner从未在源代码中初始化。而且,我找不到任何线索 runner用于运行可调用的。

问题:自 runner从未初始化,如何使用它来运行 Callable

最佳答案

在代码中可以看到

if (state != NEW ||
        !UNSAFE.compareAndSwapObject(this, runnerOffset,
                                     null, Thread.currentThread()))

run 方法的开头。忽略 state != NEW 部分;这会尝试将 runner 变量设置为 Thread.currentThread() 的结果(并且仅当当前为 null 时才会成功)。仅当成功(返回 true)时,run 方法才能够执行此 block 中的其余代码。并且由于 Thread.currentThread() 的结果将是调用 run 方法的 Thread,因此文档是准确的(至少,在此初始 if 部分已成功评估)。

关于java - 如何使用runner来运行FutureTask<V>中的Callable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581182/

相关文章:

Java,遍历结果集

java - Comparable-compareTo方法

java - 当两个线程同时执行cache.putIfAbsent时会发生什么?

java - 遍历 List<Future> 对象抛出 IndexOutOfBounds 异常

java - 如何正确获取父 fragment 而不是父 Activity 中的 DatePicker 值

java - 如何获取现有的 websocket 实例

java Callable FutureTask Excecuter : How to listen to finished task

java - 维护线程池任务队列的类型信息

java - 创建新实例时,如何检查它是否重复,如果是,则返回原始指针?

java - 如何正确扩展FutureTask