这个疑问(担心)一直存在,现在实际项目里要用到了,心里不踏实,还是希望波总能指导一下。
问题是这样的。JFinal+undertow项目,我做了一个插件,这个插件很简单,就是在start里创建了一个线程池,起了几个线程从redis里通过lpop取id,然后把数据库里根据这个id读出来数据,整理计算后再导入到solr里。
如果这个线程池里的线程正在计算,这时候中断执行整个项目,线程池里的线程会完成整个计算过程嘛?
我的担心是,由于lpop是从redis里直接弹出数据,redis里就没这个数据了,如果计算没完成,这个数据没处理完,就会导致丢失数据。
希望波总给与指导!
常规途径关闭(如tomcat undeploy/shutdown的话),可以在onStop方法做清理;
与线程池方案也有关,如果是daemon模式,线程池会直接停止;如果不是,可能会一直占用资源,你的程序并不会终止(此时会出现undeploy不掉或tomcat shutdown失败的情况)