Rol*_*all 4 java concurrency future fork-join
是否有必要,我用join()
用fork()
或者我也可以使用任一join()
,get()
,invoke()
.我检查了API,除了那个 get()
抛出InterruptedException
,ExecutionException
我没有看到差异......而且invoke()
似乎完全相同.
不过,我一直认为有关fork()
同join()
而不是其他两种方法......不,他们提供的并行?拥有invoke()
和join()
完全一样的目的是什么?通过实现future,我可以理解get(),但是invoke()和join()呢.提前致谢.
编辑:在我引用的API中我的不好实际上它说了一些关于它的内容,因为已经收到的答案指出.但他们的意思是:
方法invoke()在语义上等同于fork(); join()但总是尝试在当前线程中开始执行
提前致谢.
为什么不阅读您链接的文档?
调用
开始执行此任务,必要时等待其完成,并返回其结果,或者如果基础计算这样做,则抛出(未经检查的)RuntimeException或Error.
对我来说似乎很清楚,如果有必要,等待它的完成是非常明确地说这个方法不是异步的.
得到
如果需要等待计算完成,然后检索其结果.
这种方法是继承自的Future
,这种方法类似于join
.从javadoc join
:
完成后返回计算结果.此方法与get()的不同之处在于异常完成导致RuntimeException或Error,而不是ExecutionException,并且调用线程的中断不会导致方法通过抛出InterruptedException而突然返回.
因此,要使用Fork/Join框架,您需要调用fork
哪个是异步的.然后在本地完成任务的其他部分.然后打电话join
.
fork join框架的基本前提是它用于可以多线程的分而治之算法.
这个想法是你将任务分成两个独立的单元,然后将一个ForkJoinTask
通过另一个通过fork
- 它同时运行到当前Thread
.然后,您可以处理当前的其他单位Thread
.完成后,您可以调用join
第一个任务以确保从中获得结果.
调用invoke
等待调用的任务完成.所以你的方法现在不是异步的.你只是按顺序运行你的所有部分,有点击败fork/join.
因此,如果你要调用x.fork().join()
它将是相同的,x.invoke()
但重点是你Thread
在调用fork
和之间的当前工作join
.
归档时间: |
|
查看次数: |
3400 次 |
最近记录: |