我必须为并发Mergesort编写代码,我的问题是,如果合并排序实现想要创建一个新线程,它必须检查是否有可用的线程槽(所以我创建了一个Threapool(最大值) 5个线程)。它也有效,但我的问题是我应该只使用5个线程而不重用它们。
这意味着如果没有更多线程插槽可用,则线程只为其数组部分执行传统的递归合并排序算法。
int nThreads = 5;
ExecutorService executor = Executors.newFixedThreadPool(nThreads);
for (int i = 1; i < 10; i++){
Runnable worker = new Mergesort(array);
executor.execute(worker);
}
executor.shutdown();
while(!executor.isTerminated()) {
}
答案 0 :(得分:0)
如{h 3}所述,有一些方法可以做到这一点。特别是用户 danben 的答案。
但是,您需要确保自己所说的5的计数包括主线程的数量 - 也就是5的数量是指平均主线程+4线程或 5工作者线程。
希望这能指明你解决问题的方向。