获取线程中抛出的异常信息

1763人阅读 评论(0) 收藏 举报
分类:
复制代码
 1        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
 2         // 从现在开始delay毫秒之后,每隔一天执行一次,转换为毫秒
 3         // service.scheduleAtFixedRate(this, delay, period, TimeUnit.MILLISECONDS);
 4         /**获得线程中抛出的异常,eg Integer.parseInt("AAA");,缺少jar包等*/
 5         ScheduledFuture<?> future = service.scheduleAtFixedRate(this, delay, period, TimeUnit.MILLISECONDS);
 6         try {
 7             future.get();
 8         } catch (InterruptedException e) {
 9             Throwable cause = e.getCause();
10             //发送邮件
11             MailUtils.send("Write Data To HBase Faild", cause.getMessage());
12         } catch (ExecutionException e) {
13             Throwable cause = e.getCause();
14             //发送邮件
15             MailUtils.send("Write Data To HBase Faild", cause.getMessage());
16         }
复制代码

http://stackoverflow.com/questions/2459194/no-output-from-exception

http://stackoverflow.com/questions/18217467/scheduledexecutorservice-not-printing-the-exception-stacktrace-when-the-run-meth

exception example:

复制代码
 1 public class Playground {
 2 
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         startThread();
 8     }
 9 
10     private static void startThread() {
11         ScheduledExecutorService timer = Executors
12                 .newSingleThreadScheduledExecutor();
13         Runnable r = new Runnable() {
14             int dummyInt = 0;
15             boolean dummyBoolean = false;
16 
17             @Override
18             public void run() {
19                 dummyInt = Integer.parseInt("AAAA");
20 
21                 if (dummyBoolean) {
22                     dummyBoolean= false;
23                 } else {
24                     dummyBoolean= true;
25                 }
26 
27             }
28 
29         };
30 
31         timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);
32 
33     }
复制代码

How can I get it to?

I would expect to see this:

复制代码
 1 java.lang.NumberFormatException: For input string: "AAAA"
 2     at java.lang.NumberFormatException.forInputString(Unknown Source)
 3     at java.lang.Integer.parseInt(Unknown Source)
 4     at java.lang.Integer.parseInt(Unknown Source)
 5     at Playground$1.run(Playground.java:25)
 6     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
 7     at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
 8     at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
 9     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
10     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
11     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
12     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
13     at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
14     at java.lang.Thread.run(Unknown Source)
复制代码

The executor probably sets its own uncaught exception handler on the thread, so the stack trace won't be printed to the console. If an exception is thrown in the Runnable you can get it from theScheduledFuture object returned by the scheduleAtFixedRate method:

 

复制代码
1 ScheduledFuture<?> future = timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);
2 try {
3     future.get();
4 } catch (ExecutionException e) {
5     Throwable cause = e.getCause();
6     cause.printStackTrace();
7 }
复制代码

 

 

查看评论

如何捕获子线程异常

一 直接在主线程捕获子线程异常(此方法不可取) using System; using System.Threading; namespace CatchThreadException { ...
  • tiana0
  • tiana0
  • 2015-06-20 18:58:46
  • 5860

C++11多线程异常

一旦开始了线程,需要显示决定要等待线程函数完成或分离它自行完成。如果detach()线程不等待,你要确保通过线程访问的数据是有效的,直至该线程完成为止,例如线程函数持有局部变量的指针或引用,且当主函数...
  • u014775175
  • u014775175
  • 2016-12-05 21:00:17
  • 1095

捕捉线程的异常

线程的正常运行和销毁一般都是用java.util.concurrent.ExecutorService,这个接口能提供线程很多的帮助简单的线程异常捕捉示例public class TestThread...
  • czmchen
  • czmchen
  • 2011-03-07 16:35:00
  • 4089

简单多线程爬虫+Jsoup分析

使用简单多线程和Jsoup分析,得到CSDN的首页的所有子网页连接。 运行效果如下图 ---------------------------------------------------...
  • sinat_32588261
  • sinat_32588261
  • 2017-06-13 23:50:05
  • 1386

Jsoup引发的异常java异常

今天在使用Jsoup的时候发现了一个由Jsoup引发的异常具体提示如下:IllegalArgumentException Request must be executed (with .execute...
  • zzq1992126
  • zzq1992126
  • 2017-11-02 20:39:34
  • 118

主线程捕捉线程池中线程抛出的异常

package 线程池; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; im...
  • wym1581
  • wym1581
  • 2016-04-24 08:50:51
  • 1804

捕获子线程异常 vb.net c#

c#  如果程序里面使用了多线程技术的话!就需要对子线程的异常做出特殊的处理!据我所知,如果没有做特殊处理的话,好像子线程的异常不会抛给主线程,有时会直接在客户端抛出异常(这当然不是我们想要的),更夸...
  • ssihc0
  • ssihc0
  • 2011-02-09 10:59:00
  • 3720

ScheduledExecutorService中scheduleAtFixedRate方法的同步

因为scheduleAtFixedRate是指定频率执行方法,若方法的执行时间大于指定的间隔时间,将会发生,同一时间点 ,执行方法N 次。 所以需要使用同步方法才确保并发操作的安全性。 impor...
  • z69183787
  • z69183787
  • 2012-11-19 11:02:39
  • 8502

Spark 临时记录

讯方实训平台 xunfangBD项目基础Jar包 设置日志输出级别 // import org.apache.log4j.{Level, Logger} Logger.getRootLo...
  • yizheyouye
  • yizheyouye
  • 2016-04-07 10:10:10
  • 1051

Spring事务异常回滚,捕获异常不抛出就不会回滚

最近遇到了事务不回滚的情况,我还考虑说JPA的事务有bug? 我想多了.......     为了打印清楚日志,很多方法我都加tyr catch,在catch中打印日志。但是这边情况来了,当这个方法异...
  • yipanbo
  • yipanbo
  • 2015-05-27 16:21:38
  • 86533
    个人资料
    持之以恒
    等级:
    访问量: 987万+
    积分: 8万+
    排名: 19
    文章分类
    最新评论