返回信息流代码大致如下:
一个实现了runnable接口的类,run里面的内容如下:
while(true){
try{
......
}catch(Exception e){
logger.error(e,e)
}
}
然后Executors.newSingleThreadExecutor().submit()
一开始跑的好好地,然后今天突然发现这个线程不工作了,debug,发现executor里面activeThread=0 completedTask=1
log里面没有看到任何异常
再仔细看,发现一个很奇怪的地方:4月11号晚上23:59还在工作(能看到打印的log),然后4月12号0点一过,直到今天再也没看到相关log的打印。
搞了半天,没有头绪。无奈重启,重启后又正常了。。。
======================================
单线程的线程池,task是while(true)从一个LinkedBlockingQueue里面取数据,出现问题的时候,queue里面已经堆了好几百条数据了,然后再看线程池,直接显示已完成task=1,这。。 实在想不明白while(true)也能跳出?看了tomcat下面所有的log,没有任何异常,/var/log/messages也毛线都没有
又往前看了几天的log,发现一到0点,这个线程就这个样子了,重启之后就好了,然后到0点就又。。。。
===================================
昨天catch(Throwable)然后重启,本想能catch到点什么东东,结果到现在倒是一直好好的了,安然度过了0点
这尼玛。。。
这是一条镜像帖。来源:北邮人论坛 / java / #55942同步于 2017/4/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
java线程莫名停止工作了,没有任何异常
xinzhong
2017/4/13镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
请教一下,假死状态能说的再详细些么? 是垃圾回收的问题?
还有,我看了最近一段时间的log,都是在凌晨0点前后发生的这个问题,这个想不通为啥
【 在 wht 的大作中提到: 】
: while true的锅,java虽然有自动垃圾回收,但是没有你想象的那么智能,明显是程序进入假死状态了
没有任何error打印,而且task完成了,线程池里面没有任何在跑的线程,也没有阻塞住的线程?说明跳出while(true)了,不可能啊
透露着诡异。。
不太懂这个跟GC有啥关系
让暖神分析分析 @nuanyangyang