从其他线程捕获异常



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

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();
}

}

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

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

您还可以使用监听器,如How to throw a checked exception from a java thread?

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

附带说明的是,调用AnotherClass.run()不会启动新线程,而是仅从同一线程内的AnotherClass调用run方法。请改用new Thread(new AnotherClass()).start()

最新更新