【问题标题】:Using Anonymous thread for catching Exceptions使用匿名线程捕获异常
【发布时间】:2013-06-05 05:06:08
【问题描述】:

我询问了有关在线程上下文中捕获已检查异常的问题;接受的答案是使用Callables 和Futures。

但我意识到我可以简单地用匿名线程包装“工作”方法并捕获异常,因为它将在没有线程的情况下执行。

(worker的逻辑从实现Callable的新类移到调用者类)

class BlaBla{

public void foo(){

Thread th = new Thread(new Runnable() {
  public void run() {
    try {
    doWork();
    } catch (MyCheckedException e) {
      dosomething();
    }
  }
});
th.start();
}

public void dowork throws MyCheckedException{
}

这种方法有什么问题吗?

【问题讨论】:

  • 是否存在问题取决于您要达到的目标。为什么不希望在主线程中捕获异常?
  • 是的,没关系,或者您可以使用 UncaughtExceptionHandler:stackoverflow.com/a/12409676/829571

标签: java multithreading exception-handling checked-exceptions


【解决方案1】:

是的,只要您知道自己在 doWorkdoSomething 方法中所做的工作,这应该可以工作。

它是否在访问其他线程也可以访问的数据?如果是这样,那么您应该考虑使用synchronized 或其他一些线程安全方法来保护它,例如使用线程安全消息队列在线程之间传递消息。您必须考虑最能解决您的问题的方法。

更多地了解它在做什么会很有趣,因为当您将它包装在一个线程中时,您需要考虑如何以线程安全的方式从该线程获取数据。可能有一种简单而安全的方法来完成这项工作,但这取决于具体情况。

【讨论】:

    猜你喜欢
    • 2015-08-31
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2011-02-19
    • 2015-01-22
    • 2010-09-16
    相关资源
    最近更新 更多