【问题标题】:java managing worker-thread deathsjava管理工作线程死亡
【发布时间】:2015-12-01 08:16:42
【问题描述】:

所以,我有一个主线程,它会产生一堆“工作线程”,在整个过程中与它一起工作。我想要的是,如果一个工作线程因异常或其他原因而死,主线程也应该抛出一个运行时异常并平静地死去。

这可以通过在 worker-tread 中捕获异常并在退出前设置错误标志来实现。然后主线程轮询这个标志,如果它被设置则抛出一个异常。这可以通过 try-catch 或设置异常处理程序来完成。

我的问题是是否有一种更简单的方法不包括在主线程中进行轮询。如果您知道我的意思,就会自动运行。

编辑: 好吧,许多人声称设置处理程序就是答案,而且这是重复的。好吧,除非我在这里弄错了,否则处理程序是由首先引发异常的线程执行的,所以我仍然必须设置一个标志来终止主线程。我认为这很清楚。所以让我澄清一下;

我想要的是,如果一个工作线程死于异常或诸如此类,主线程也应该抛出一个运行时异常并平静地死去,不使用标志,但是已经完成了“自动”

【问题讨论】:

  • 不,这不是同一个问题
  • 嗯,这不是完全相同的问题,但非常相似,线程包含你需要的一切。
  • 不完全是,但 UncaughtExceptionHandle 是您的首选实现。
  • 好的,我看到的问题是,根据我自己的经验,uncaughtExceptionHandler 的工作方式与 try-catch 块没有什么不同,在任何一种情况下我都必须设置一个标志,因为处理程序是由正如我所写的那样,一个工作线程而不是主线程。这仍然意味着我必须在主线程中轮询一些状态。至少这是我上次尝试时必须做的。

标签: java multithreading


【解决方案1】:

在主线程中有一个CountdownLatch,让它等待CountdownLatch

当线程退出时减少CountdownLatch。当这种情况发生时,让主线程采取适当的行动。

【讨论】:

    猜你喜欢
    • 2018-02-22
    • 2012-04-27
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多