0
可运行任务分析传入的xml文件并从不同的类调用。有时解析可能会失败并抛出异常。即使发生异常,任务仍应运行。我尝试使用未捕获的异常处理程序在新线程中重新启动相同的任务。但想要更多的想法。使用未捕获的异常处理程序在异常上启动新线程
调用Thread类:(调用线程)
它工作正常,重新启动在新线程相同的任务,但可能处理异常不会导致线程退出应该是这样
Thread fileProcessThread = new Thread(FileProcessor);
fileProcessorThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException (Thread arg0, Throwable arg1)
{
FileProcessor newObject = new FileProcessorTask();
Thread t = new Thread(newObject);
t.start();
}
});
fileProcessor.start();
任务类:
public void run() {
try {
xmlparser.parse(incomingXmlFile);
}
catch (Exception e) {
Thread.currentThread.getUncaughtExceptionalHandler().uncaughtException(Thread.currentThread(), e);
// this invokes uncaughtException to restart thread ?
}
}
我有一个监视服务(文件目录扫描)运行,所以我需要任务所有th即使线程终止。
在您的情况下再次启动此线程是不合逻辑的。您应该将解析逻辑封装到FileProcessor中,并在catch节中适当地处理xml解析器异常。它与Thread.setUncaughtExceptionHandler无关;如果你可以在这样的线程中放弃对异常的控制,这个可能会很方便。 –
我有一个观察服务(文件目录扫描)在线程上运行,所以我希望这个线程继续,尽管发生了一个异常@AlexanderDrobyshevsky –
一旦涉及到由getUncaughtExceptionalHandler设置的ExceptionHandle,你的线程将被销毁结束。您只能启动一次线程。因此,您可以在正在运行的方法内正确处理异常,或者在此方法死亡时启动新线程。在最后一种情况下,您应该创建一个新线程。 –