了解ForkJoinTask的invokeAll方法

时间:2015-02-11 12:50:32

标签: java multithreading

在我阅读the javadoc about ForkJoinTask时,我发现了以下声明:

  

此方法只能在ForkJoinPool次计算中调用   (可以使用方法inForkJoinPool()确定)。尝试去   在其他上下文中调用可能会导致异常或错误   包括ClassCastException

我不清楚ForkJoinContext在这里是什么意思。例如,我知道静态上下文的含义。它明确地在JLS 8.1.3中定义如下(Emphasize's mine):

  

声明或表达式在静态上下文中出现 当且仅当   最里面的方法,构造函数,实例初始化器,静态   初始化程序,字段初始值设定项或显式构造函数调用   括起语句或表达式的语句是静态方法,a   静态初始化程序,静态变量的变量初始值设定项,或   显式构造函数调用语句(第8.8.7节)。

1 个答案:

答案 0 :(得分:4)

这里讨论的上下文不是静态/非静态上下文。

这意味着必须从属于ForkJoinPool

的线程调用该方法

所以必须从递归任务中调用它。从其他任何地方打电话都可能导致异常/错误。