典型的ExecutorService示例显示了使用while循环,该简单循环在关闭请求后终止了简单测试。我的想法是,while循环被调用得太多了,什么也没做。
将Thread.sleep(x)放入循环中可以释放一些处理器资源吗?
es.shutdown();
while (!es.isTerminated()) {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
return;
}
}
答案 0 :(得分:3)
这里主要的错误是:
InterruptedException
传播来完成的,但是也可以通过重新中断线程来实现。最好使用
es.awaitTermination(60, SECONDS);
以便在执行程序终止时立即停止。
而且,当您遇到中断时:
Thread.currentThread().interrupt();
允许其传播。
或者,放弃循环,只是睡了很长时间:
es.awaitTermination(Long.MAX_VALUE, SECONDS);
答案 1 :(得分:0)
在这种特定情况下,仅当您绝对需要在执行任何其他逻辑之前使执行程序服务失效时,才使用Thread.sleep
。
如果不是这种情况,那么在执行程序关闭时暂停睡眠的主线程没有多大意义,Jvm在执行Thread.sleep(60000)时不会释放很多资源