我正在尝试使用Java的执行程序执行多线程程序。执行时,java线程异常终止。我通过try-catch捕获了异常,但是该异常中没有消息(空)。
该故障是随机的,但是我“怀疑”该故障是在该线程中进行函数调用之后发生的。我试图将线程堆栈的大小增加到1024/2048,但结果仍然相同。
有人可以指出这里要采用的调试方法吗?因为,我没有有关异常的信息,所以我无法继续进行处理。
我在使用Java 1.6的Windows 64位环境中工作
最佳答案
在使用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;
}