Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Threadpool Java创建的最大线程数_Java_Multithreading_Concurrency_Mergesort - Fatal编程技术网

使用Threadpool Java创建的最大线程数

使用Threadpool Java创建的最大线程数,java,multithreading,concurrency,mergesort,Java,Multithreading,Concurrency,Mergesort,我必须为并发Mergesort编写代码,我的问题是,如果merge sort实现想要创建一个新线程,它必须检查是否有可用的线程槽(因此我创建了一个线程池(最多5个线程)。它也可以工作,但我的问题是,我应该只使用5个线程,而不重用它们 这意味着如果没有更多的线程槽可用,线程只对其数组部分执行传统的递归合并排序算法 int nThreads = 5; ExecutorService executor = Executors.newFixedThreadPool(nThreads);

我必须为并发Mergesort编写代码,我的问题是,如果merge sort实现想要创建一个新线程,它必须检查是否有可用的线程槽(因此我创建了一个线程池(最多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()) {

    }   
int=5;
ExecutorService executor=Executors.newFixedThreadPool(n线程);
对于(int i=1;i<10;i++){
Runnable worker=新的合并排序(数组);
执行人,执行人(工人);
}
executor.shutdown();
而(!executor.isTerminated()){
}   

如本文所述,有一些方法可以做到这一点。特别是请参考用户的回答danben

但是,您需要确保您声明的5个计数也包括主线程或不包括主线程,也就是说,5个计数意味着主线程+4个线程5个工作线程


希望这能为您指明解决问题的方向。

非常感谢!!我想CallerRunPolicy()就是我要找的东西:)