从另一个线程捕获异常?

时间:2011-11-11 15:21:46

标签: java multithreading exception

我正在编写一个将使用多个线程的应用程序。有一个主线程正在启​​动另一个线程。我想要实现的是当其中一个启动的线程抛出异常时,主线程应该停止启动线程。看起来或多或少是这样的:

class SomeClass {
boolean launchNewThread = true;
public static void main() {
    while (launchNewThread) {
        try {
            AnotherClass.run();
        } catch (CrossThreadException e) {
            launchNewThread = false;
        }
    }
}
}

class AnotherClass implements Runnable {
    public void run() {
        if (a=0) throw new CrossThreadException();
}

}

2 个答案:

答案 0 :(得分:10)

你应该自己动手 - 捕获异常并以某种方式将其传递给启动线程。

此外,还有Future概念,它已经做到了。您应该将线程作为期货启动并检查isDone(),并从ExecutionException捕获get(),如果将来的任务抛出异常,则会抛出此异常。

答案 1 :(得分:4)

您还可以使用How to throw a checked exception from a java thread?

中所述的监听器

当在其中一个子线程中抛出异常时,您可以从子线程中调用类似listener.setLaunchNewThread(false)的方法,这将更改父线程中布尔标志的值。

另外,调用AnotherClass.run()不会启动新线程,只会在同一个线程中从AnotherClass调用run方法。请改用new Thread(new AnotherClass()).start()