pep*_*ito 5 java exception-handling scheduled-tasks
为什么我们在这个例子中看不到堆栈跟踪?
public class NoStackTraceTester implements Runnable {
private static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
private ScheduledFuture<?> lifeCheckFuture;
@Override
public void run() {
lifeCheckFuture = startLifecheck();
}
private ScheduledFuture<?> startLifecheck()
{
Runnable lifeCheck = new Runnable()
{
@Override
public void run()
{
System.out.println("sending lifecheck ...");
throw new RuntimeException("bang!");
}
};
return scheduler.scheduleAtFixedRate(lifeCheck, 1000, 1000, TimeUnit.MILLISECONDS);
}
public static void main(String[] args) {
new NoStackTraceTester().run();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您尝试对异常进行注释,您将执行 lifecheck 函数的重复任务。但是如果抛出异常,线程停止但没有细节:(
你知道为什么吗?
如果你想要异常报告,你必须自己插入处理代码。ExecutorService 不会自动将异常跟踪发送到标准输出,这很好,因为这很少是我们在生产代码中需要的。
基本上,这是方法:
public void run()
{
try {
System.out.println("sending lifecheck ...");
throw new RuntimeException("bang!");
} catch (Throwable t) { t.printStackTrace(); }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |