mai*_*rgs 4 java multithreading exception executorservice
为什么这段代码不能打印异常堆栈跟踪?
public class Playground {
    /**
     * @param args
     */
    public static void main(String[] args) {
        startThread();
    }
    private static void startThread() {
        ScheduledExecutorService timer = Executors
                .newSingleThreadScheduledExecutor();
        Runnable r = new Runnable() {
            int dummyInt = 0;
            boolean dummyBoolean = false;
            @Override
            public void run() {
                dummyInt = Integer.parseInt("AAAA");
                if (dummyBoolean) {
                    dummyBoolean= false;
                } else {
                    dummyBoolean= true;
                }
            }
        };
        timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);
    }
}
我怎么能得到它?
我希望看到这个:
java.lang.NumberFormatException: For input string: "AAAA"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Playground$1.run(Playground.java:25)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
执行程序可能在线程上设置了自己的未捕获异常处理程序,因此堆栈跟踪不会打印到控制台.如果抛出异常,Runnable您可以从方法ScheduledFuture返回的对象中获取它scheduleAtFixedRate:
ScheduledFuture<?> future = timer.scheduleAtFixedRate(r, 0, 100, TimeUnit.MILLISECONDS);
try {
    future.get();
} catch (ExecutionException e) {
    Throwable cause = e.getCause();
    cause.printStackTrace();
}
| 归档时间: | 
 | 
| 查看次数: | 2807 次 | 
| 最近记录: |