好的,我将通过举例来解释我的要求。
假设我在给定时尝试实现并行合并算法:
db是一个数组,其中db[i]是一个对象的 ArrayList。
j是它的大小。 Merger(db,cmp,i,j)是将db[ j ]合并 到 db[i] 的可运行对象。
cmp 是一个相关的比较器。
这是我首先完成的:
ExecutorService e = Executors.newFixedThreadPool(3);
while (j>0)
for ( i=0;i<j;i++,j--)
e.execute(new Merger<E>(db,cmp,i,j));
但是随后开始了一些合并,而之前需要先完成的合并尚未完成。(更不用说正在运行的线程在合并完成之前完成了循环方式......)这让我的程序踢出了一个异常。
这是我不能做但想做的事,因此需要你的帮助:
ExecutorService e = Executors.newFixedThreadPool(3);
while (j>0) {
for ( i=0;i<j;i++,j--)
e.execute(new Merger<E>(db,cmp,i,j));
wait for e to announce that all runnables have finished running;
}
在我看来,这应该可行,如果您认为不行,请解释原因,但无论如何,我想知道它是如何完成的。
(基本上我可以实现我自己版本的 FixedThreadPool 以使其成为可能,但我宁愿不这样做)