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