【发布时间】:2012-10-19 22:25:48
【问题描述】:
我通常用大约 4 个线程运行我的程序,并且在程序运行后 1 小时到 10 小时之间的任何地方,一些线程只是停止并且什么也不做,我的程序围绕 Exception 和 Throwable 块,我也有一个 uncaughtException线程并且没有任何关于任何错误的信息添加到我的日志文件中。如何找到导致线程停止的原因?
编辑
这是我的代码的基本结构
下面是设置 uncaughtException 块的代码
newThread.setName("Thread" + totalNumberOfThreads);
newThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
Main.logger.info("ERROR! An exception occurred in " + t.getName() + ". Cause: " + e.getMessage());
}
});
newThread.start();
这是线程的基本结构
@Override
public void run()
{
while (true)
{
try
{
//a long section of code
}
catch (Exception e)
{
e.printStackTrace();
Main.logger.info(threadName + ": " + e);
}
catch (Throwable t)
{
Main.logger.info(threadName + ": " + "Throwable: " + t);
}
finally
{
//some code to close connections.. ect..
}
} // end while
}
【问题讨论】:
-
Deadlocks 是直接嫌疑人。确定程序是否会有一个可能非常棘手。程序在单线程运行时工作正常吗?你在线程之间使用什么同步?
-
你是什么意思,你有“线程的 uncaughtException”?
-
在启动线程之前我有 newThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){ @Override public void uncaughtException(Thread t, Throwable e) { Main.logger.info("ERROR!发生异常在 " + t.getName() + "。原因:" + e.getMessage()); } });
-
不幸的是,我不能粘贴很长的整个代码,而且我不拥有代码,我只是在处理它,但我已经编辑了我的问题以显示程序的结构.
-
@Arya:我不明白你为什么认为这是一个抛出的异常——如果没有显示异常?需要详细说明吗? :|
标签: java multithreading