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