java 自定义 钩子_Java添加关闭钩子里面的方法
在我的代碼中,我使用CompletionService和ExecutorService來啟動一堆Thread來執行某些任務(這可能需要很長時間) . 所以我有一個創建ExecutorService和CompletionService的方法,然后開始提交線程然后獲取結果 . 我想添加一個關閉鉤子,以便優雅地關閉執行程序(我知道可能我應該處理釋放資源而不是 Actuator 關閉但在我的情況下每個線程都有自己的資源,所以優雅地關閉它們可以是一個很好的解決方案我假設) .
因此我編寫以下代碼
public Class myClass{
...
private CompletionService completion;
final long SHUTDOWN_TIME = TimeUnit.SECONDS.toSeconds(10);
...
public Message executeCommand(Message request){
final ExecutorService executor = Executors.newFixedThreadPool(30);
completion = new ExecutorCompletionService(executor);
....//submit and take results
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
logger.debug("Shutting down executor");
try {
if (!executor.awaitTermination(SHUTDOWN_TIME, TimeUnit.SECONDS)) {
logger.debug("Executor still not terminate after waiting time...");
List notExecuted= executor.shutdownNow();
logger.debug("List of dropped task has size " + droppedTasks.size());
}
}catch(InterruptedException e){
logger.error("",e);
}
}
});
}
}
您認為這是一個合理的解決方案,還是使用本地類注冊和取消注冊關閉鉤子是不安全的?
提前致謝
問候
總結
以上是生活随笔為你收集整理的java 自定义 钩子_Java添加关闭钩子里面的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Monkey稳定性测试初探(二)
- 下一篇: ajax获取表单php,Yii2基于Aj