0

我四处询问有关在线程上下文中捕获已检查异常的问题;接受的答案是使用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{
}

这种方法有什么问题吗?

4

1 回答 1

1

是的,只要你知道你在这些doWorkdoSomething方法中做什么,它就应该有效。

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

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

于 2013-06-09T10:52:13.217 回答