Java线程异常终止,异常消息为null。
我正在尝试使用Java的执行器执行一个多线程程序。执行时,java线程异常终止。我通过try-catch捕获了异常,但是,异常中没有消息(null) 失败是随机的,但是我“怀疑”失败是在我在该线程中进行了函数调用之后发生的。我试图将线程堆栈大小增加到1024/2048,但结果保持不变 有人能指出这里要采用的调试方法吗。因为,我没有关于异常的信息,所以我无法继续Java线程异常终止,异常消息为null。,java,windows,multithreading,Java,Windows,Multithreading,我正在尝试使用Java的执行器执行一个多线程程序。执行时,java线程异常终止。我通过try-catch捕获了异常,但是,异常中没有消息(null) 失败是随机的,但是我“怀疑”失败是在我在该线程中进行了函数调用之后发生的。我试图将线程堆栈大小增加到1024/2048,但结果保持不变 有人能指出这里要采用的调试方法吗。因为,我没有关于异常的信息,所以我无法继续 我在Windows 64位环境下工作,使用java 1.6,同时使用Executors类创建线程池,使用接受ThreadFactory的
我在Windows 64位环境下工作,使用java 1.6,同时使用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;
}
请告诉我们异常类名(如
NullPointerException
)。堆栈跟踪也可能有帮助。您可能遇到了NullPointerException。你能在这里发布一部分代码吗?你可以用它来获取堆栈跟踪:。。。catch(异常e){e.printStackStrace();}我后来发现其中一个被调用的例程在NPE中失败,尽管线程堆栈跟踪没有显示它是NPE,而NPE正在杀死它。printStackTrace不适用于线程。谢谢,这看起来是一个很好的编程实践,尤其是对于内层子例程中的未捕获异常。要提供更多详细信息,通过ExecutorService提交的任务被包装到FutureTask中,FutureTask捕获Throwable并通过FutureTask#get()提供异常;所以这个练习真的很有意义。谢谢!我们还发现,同样的未来任务也会有一个超时。我一直在找这个,很久了!!谢谢@悉达多·尚卡兰也许你可以接受这个答案;-)