使用匿名线程捕获异常

时间:2013-06-09 10:31:06

标签: java multithreading exception-handling checked-exceptions

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

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

(工作者的逻辑从一个实现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{
}

这种方法有问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

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