正确使用执行程序服务时遇到了问题。我是执行者的新蜜蜂,并通过网络尝试解决这个问题。但不能证明它更合理。 我将尝试完成我的要求和实施。
我有一个无限循环来产生线程,最大限制应该是50。
public void createWorkers(){
ExecutorService executor = Executors.newFixedThreadPool(50);
while(true) {
executor.execute(innerRunnableThread); // a runnable thread
}
}
QUERY:因为它是一个无限循环,如何关闭执行程序服务(executor.shutdown())?
第一点中提到的“innerRunnableThread”具有以下代码:
public class InnerRunnableThread implements Runnable {
@Override
public void run() {
ExecutorService innerExecutor = Executors.newFixedThreadPool(10);
for (int i=0; i<10;i++){
executor.execute(detailRunnableThread); // a runnable thread
}
innerExecutor.shutdown();
try {
innerExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
loggr.error("exception thrown while spawning threads");
}
}
}
QUERY: 1.父线程(在第1点),限制为50个线程。但是通过这种实现,父线程不会产生超过5.它的原因是什么?
COMBINED QUERY:
使用这种方法,在第一点排除执行程序服务的关闭,有数千个线程未被终止在服务器上。最后导致关闭此应用程序并且无法启动?
对于这种特殊方法的善意帮助以及实现这种逻辑的更好的替代方案将非常有用。
非常感谢。