如何让匿名runnable
使父方法抛出异常?
public boolean drive2Exit() throws Exception {
while(true) {
handler.postDelayed(new Runnable() {
public void run() {
try {
...
catch (Exception e) {
//drive2Exit should throw exception
}
}
}, 100);
}
}
答案 0 :(得分:1)
我认为你可能是使用Future的最佳服务器:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html
使用它你可以在你的主代码中检查runnable的结果,如果它抛出异常,你将获得异常处理代码检查未来。使用该异常,我认为嵌入的原始异常决定了什么扔在未来之外。
答案 1 :(得分:0)
我不认为你是否能做到这一点。当在子线程中引发异常并且它没有被捕获时,子线程将在没有父母知道的情况下死亡。我能想到的是catch
孩子中的Exception
并将其置于共享数据结构中,例如在子级和父级之间共享的static
变量。如果其子项中存在任何异常,家长会定期轮询此数据结构。
或者,您可以实现Observer
设计模式,以便在任何子节点中出现新异常时通知main
线程(即共享数据结构已更改。)