关于执行JAVA线程任务时出现异常后线程挂掉问题

ghostwh 2011-08-13 12:45:14
我现在有个后台应用程序,通过线程轮询进行将数据插入数据库中,这么一个过程是由一个线程任务来完成的,现在如果执行线程任务的时候数据库出现网络连接异常后这个线程任务的线程就挂掉了我的轮询任务也就没有了,就是想问如果执行这样的线程认为如何能够维持当前线程的状态不被结束?
...全文
991 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
使用线程池 ThreadPoolExecutor。

当 Runnable run 方法中抛出异常的话,线程就会终止,这种情况称为线程泄漏。JDK 5 新加入了 ThreadPoolExecutor 的线程池执行器,在产生线程泄漏时,会补充一个新的线程到池中去。

线程泄漏除了使用线程池之外,基本上没有什么很好的解决方案。当然了,也可以自行实现线程池,不过这个难度非常非常高,很难做到。

如果使用 JDK 5 之前版本的话,可以使用 Java 并发大牛 Dong Lea 编写的并发类库,这个类库是 JDK 5 并发包的前身:

http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html
龙四 2011-08-13
  • 打赏
  • 举报
回复
一、用try...catch住整个轮询任务,用Timer出异常hotspot jvm在xp上不会死掉,但AIX上(可能是IBM J9的实现)的会死掉


二、用java.util.concurrent.Executors.newScheduledThreadPool(int corePoolSize)就不会有上述困扰了
liuzhengkang 2011-08-13
  • 打赏
  • 举报
回复
在线程的run里加个外层try捕捉下就行啊
run(){
while(true){
try{
...
}catch(e){
}
}
Fly_m 2011-08-13
  • 打赏
  • 举报
回复
捕获异常,在异常之后,重新启动线程
飞跃颠峰 2011-08-13
  • 打赏
  • 举报
回复
线程挂掉的原因应该是网络连接异常导致线程运行抛出异常,而该异常没被捕获和处理就挂掉了
在线程中捕捉该异常并做相应处理,比如继续轮询等待网络回复正常线程就不会结束了

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧