私はspring beanでthreadpoolexecutorを作成します。したがって、tomcatがシャットダウンされたときにこのexecutorをシャットダウンする必要があります。TomcatがシャットダウンされているときにSpring beanでThreadPoolExecutorをシャットダウンする方法はありますか?
public class PersistBO implements InitializingBean {
private ThreadPoolExecutor executer;
public void shutdownExecutor() {
executer.shutdown();
}
@Override
public void afterPropertiesSet() throws Exception {
taskQueue = new LinkedBlockingQueue<Runnable>(queueLength);
executer = new ThreadPoolExecutor(minThread, maxThread, threadKeepAliveTime,
TimeUnit.SECONDS, taskQueue, new ThreadPoolExecutor.DiscardOldestPolicy());
}
解決策をGoogleで検索して結果を得ました。これは、java.lang.runtimeにshutdownhookを追加することです。しかし、javaドキュメントでは、java.lang.Runtime#shutdownHookは最後の非デーモンスレッドが終了すると呼び出されます。だからデッドロックです。 Spring BeanでExecutorをシャットダウンする方法はありますか?
正しいスレッドファクトリを指定すると、プールにデアモンスレッドを使用することもできます。 –