ExecutorService一直都没有shutdown……

spring


发表于 2016-11-10 16:56


最近有一段时间我的tomcat是这么关闭的:
/xxxx/tomcat/bin/shutdown.sh
top -m
细细的观察
kill -9 java进程

还自以为是的google了下为什么我的tomcat关掉了java进程还在。。。

今天在使用调度服务的时候突然发现我的ExecutorService从来没有shutdown啊。。。博客源码中随处可见

    Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {

            @Override
            public void run() {
                invalidIpMap.values().removeIf(x -> ((System.currentTimeMillis() - x) > invalidSec * 1000));
            }
        }, invalidIpClearSec, invalidIpClearSec, TimeUnit.SECONDS);

这样的代码,现在回头再看真是1d558ad4b31c8701870b3443207f9e2f0608fff8.jpg
当初为了图方便没有使用(其实是没有正确的了解如何去使用)spring的executor和scheduler(虽然都是基于ExecutorService),但用spring的更加的方便:

    <bean id="taskExecutor"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" destroy-method="destroy">
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
    </bean>

    <bean id="taskScheduler"
        class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler" destroy-method="destroy">
        <property name="poolSize" value="20" />
        <property name="waitForTasksToCompleteOnShutdown" value="true" />
    </bean>

注意下destroy-method就可以了。
这次的情况说明了我知道ExecutorService能用在这个场合,但是并没有弄懂如何去使用它,引以为鉴


搜索