我询问有关在线程上下文中捕获已检查异常的问题;接受的答案是使用Callable
和Future
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{
}
这种方法有问题吗?
答案 0 :(得分:1)
是的,只要您知道自己在doWork
和doSomething
方法中所做的工作,这应该会有效。
是否访问其他线程也可以访问的数据?如果是这样,那么你应该考虑使用synchronized
或其他一些线程安全的方法来保护它,比如使用线程安全的消息队列在线程之间传递消息。你必须考虑什么才能最好地解决你的问题。
了解它正在做什么会更有趣,因为当你将它包装在一个线程中时,你需要考虑如何以线程安全的方式从该线程获取数据。可能有一种简单而安全的方式来完成工作,但这取决于具体情况。