Java newFixedThreadPool活动线程数
我有一个问题,这是我的代码片段Java newFixedThreadPool活动线程数,java,multithreading,Java,Multithreading,我有一个问题,这是我的代码片段 executor = Executors.newFixedThreadPool(10); int count = 0; while(true){ if(count < 10){ runner = new Runner(); futures.add(executor.submit(runner)); count++; } else{ count = 0;
executor = Executors.newFixedThreadPool(10);
int count = 0;
while(true){
if(count < 10){
runner = new Runner();
futures.add(executor.submit(runner));
count++;
}
else{
count = 0;
for(f:futures){
while(!f.isDone()){sleep(1000);}
}
executor.shutdown();
executor = Executors.newFixedThreadPool(10);
}
}
我看到该进程有数千个线程,cpu负载不断增加。有什么解释吗?您在哪里关闭了执行器服务?如果您不这样做,那么这绝对不奇怪……我猜您多次调用此代码,并且在调用之间不关闭执行器。当然,你每次都应该重复使用同一个执行器。我实际上已经尝试过关机。。。如果问题出在关机上,请让我尝试确保关机已完成。为什么等待和执行器终止在循环内完成?您对
ExecutorService
API的使用是错误的。阅读由于未知原因,您正在创建ExecutorService
的新实例。由于未知原因,您没有使用invokeAll
。出于某种未知的原因,您正在嵌套循环中使用sleep
,而不是阻塞。总之,我看不出这段代码有一行是正确的。甚至格式也是错误的。
ps -eLf | grep pid | wc -l