我正在尝试使用Java的Executors执行多线程程序。执行时,java线程异常终止。我通过try-catch捕获了异常,但异常中没有消息(null)。
失败是随机的,但我“怀疑”在我在该线程中进行函数调用后发生了失败。我试图将线程堆栈大小增加到1024/2048,但结果保持不变。
有人可以指出这里采用的调试方法。因为,我没有关于异常的信息,我无法继续使用它。
我在Windows 64位环境中使用java 1.6
答案 0 :(得分:1)
使用Executors类创建线程池时,使用接受ThreadFactory的方法;示例ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory)
。
在ThreadFactory的实现中,分配一个UncaughtExceptionHandler;以下示例
public final Thread newThread(final Runnable r) {
Thread newThread = threadFactory.newThread(r); // you can use default thread factory
newThread.setName("threadName");
newThread.setDaemon(Boolean.TRUE);
newThread.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(final Thread t, final Throwable e) {
// log
}
});
return newThread;
}