当前位置: 代码迷 >> Java Web开发 >> 大神求指导:tomcat 启动时,再启动其他线程会吧tomcat卡住,无法启动,如何避免呢
  详细解决方案

大神求指导:tomcat 启动时,再启动其他线程会吧tomcat卡住,无法启动,如何避免呢

热度:253   发布时间:2016-04-16 21:46:09.0
大神求指导:tomcat 启动时,再启动其他线程会吧tomcat卡住,无法启动,如何处理呢
小弟最近做个java web项目,要求是tomcat启动启动时要开启一线程来监听某个端口来获取数据然后入库。
在做的时候想到是通过写个servlet,然后设定servlet的优先级,然后启动时在init方法里启动线程并设置了setDaemon(true),但是tomcat启动时,还没有启动完,就被那个线程卡住了,无法启动项目。
也想过写个定时器,不过我只想那个线程跟着项目启动一次就可以了。
该如何处理呢?
各位大牛给个思路吧。
------解决思路----------------------
让守护线程在ServletContextListener 里启动试试。
------解决思路----------------------
你这种方法不行,即使设定优先级,tomcat不保证一定优先执行,只是几率大而已,其实很简单,用一个bean来初始化就可以了,spring初始化不完成项目就不能访问,这样应该也达到了你的目的,你要做的就是写个类,里面包含一个init方法,在这里启动线程,然后在spring里配置
<beans>
 <bean id="yourid" class="yourclasspath" init-method="init">
  <property />
 </bean>
</beans>

------解决思路----------------------
如果你确实把 ”开启监听端口“放在一个新线程中的话,那可能是其它原因,可以在 Eclipse 中以 debug 方式启动 tomcat,然后在 debug 视图中观察所有线程,右击每一个线程,Suspend 它看它当前正走在哪里。你的新线程应该也是在其中才对,你可以观察它当前正在哪个方法中执行就能猜到原因了。
  相关解决方案