我正在尝试使用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;
}

07-26 07:18