-
Java线程加了死循环,但异常终止,可能是什么导致.0
如题,我的线程类如下:public class CreatePdfInvoiceThread extends Thread { public void run() { String invno = null; while (true) { try { Calendar calen = Calendar.getInstance(); int hour = calen.get(Calendar.HOUR_OF_DAY); //业务逻辑代码... } catch (Exception ex) { Logger.getRootLogger().error("error invno ==" + String.valueOf(invno), ex); Sendmail.getInstance().send("kaoii pdf invoice thread occured exception!!!"+ String.valueOf(invno), ex.getMessage(), ServiceConfig.getProperty("MAIL.TO")); } } } }
在另一个类中启动.CreatePdfInvoiceThread invThread = new CreatePdfInvoiceThread(); invThread.start();
感觉这个不会停止的,而且就是有任何异常也应该会被扑捉,发送邮件给运维人员的.
但线程莫名结束了.....
日志如下:[INFO ] 2014-07-14 18:02:08.707 method:com.report.ExportReport.createPdfInvoice(ExportReport.java:85) commfee:0.0
这句是线程里调用的一个类输出的,正常运行下去的话,后面还有几句的,但后面什么都没有了.到此结束.
我用jvisualvm抓了一个快照,JVM里已经没有这个线程类CreatePdfInvoiceThread 了.
问了运维,14号18点多服务器和DB都是正常的.
百思不得其解,求大牛解答~2014年7月17日 16:51
4个答案 按时间排序 按投票排序
-
线程一定要对uncaughtException进行处理,如果uncaughtException是ThreadDeath的一个实例的话是不会抛出或者答应任何东西的,线程直接终止了!如果该线程没有设置,但有设置线程组的话会调用组策略对uncaughtException进行处理。
最后,除了你有更好的方法或者特殊需求,否则一定要设置:public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh) { checkAccess(); uncaughtExceptionHandler = eh; }
2014年7月18日 15:13
-
这样的代码意义不大,线程死循环,最大的坏处,就是导致cpu使用率居高不下,如果跟其他线程有竞争资源现象的话,则出现长时间不释放资源。造成死锁可能性大。单从这个类来看 不断循环,导致jvm堆内存不断攀升,full gc应该频率会加大,最终如果堆溢出,可能会出现线程退出。如果想知道退出原因,在thread启用前,添加异常捕获方法。
invThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(e);
}2014年7月17日 23:55
-
java除了Exception还有Error。
你的代码只捕获Exception,如果出现Error线程也就退出了。
你可以获取Throwable,这样连Error也会获取。
2014年7月17日 17:42
相关推荐
主要介绍了Java中一个线程执行死循环有什么后果,当一个线程在执行死循环时会影响另外一个线程吗,下面为大家揭晓
OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 线程并不是新的概念:许多操作系统和语言都支持它们。在Java出现以前,似乎人人...
Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解
java线程.pdf java 学习java
多线程启动.java多线程启动.java多线程启动.java多线程启动.java
Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程
Java线程:线程的调度-终止线程 25 Java线程:线程的调度-守护线程 28 Java线程:线程组 30 Java线程:线程的同步 33 一、 同步方法 35 二、 同步块 36 三、 volatile关键字 38 四、 使用synchronized关键字要注意...
Java线程.pdf
Java线程Java线程Java线程Java线程Java线程Java线程
9.如何异常终止线程?(Visual C++编程 源代码)9.如何异常终止线程?(Visual C++编程 源代码)9.如何异常终止线程?(Visual C++编程 源代码)9.如何异常终止线程?(Visual C++编程 源代码)9.如何异常终止线程?...
qt 多线程 防止主线程做循环操作导致界面假死。试过多线程的几种方法,只有这个方法可行。代码亲测可行。在子线程死循环,界面正常不死!!!
java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程
Java线程如何终止.pdf
这是一个关于Java线程的ppt文件,燕山大学信息学院计算机系 李 峰
java线程 线程 教程 java线程教程 java线程学习资料 本教程有什么内容? 本教程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用...
java 多线程 加减变量
Java线程pdf帮助文档
Java多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.pptvJava多线程.pptJava多线程.pptJava多线程.pptJava多线程.ppt
1. 什么是线程? 2. 线程和进程有什么区别? 3. 如何在 Java 中实现线程? 4. 用 Runnable 还是 Thread? 5. Thread 类中的 start () 和 run () 方法有什么区别? 6. Java 中 Runnable 和 Callable 有什么不同? 7. ...