Java 使用匿名线程捕获异常
我询问了关于在线程上下文中捕获已检查异常的问题;公认的答案是使用Java 使用匿名线程捕获异常,java,multithreading,exception-handling,checked-exceptions,Java,Multithreading,Exception Handling,Checked Exceptions,我询问了关于在线程上下文中捕获已检查异常的问题;公认的答案是使用Callables和Futures 但我意识到,我可以简单地用匿名线程包装“工作”方法并捕获异常,因为它将在没有线程的情况下执行 (工作程序的逻辑已从实现可调用的新类移动到调用方类) 这种方法有什么问题吗?是的,只要你知道你在那些doWork和doSomething方法中所做的事情,这种方法就会起作用 其他线程也可以访问数据吗?如果是这样,那么您应该考虑使用synchronized或其他线程安全方法(如使用线程安全消息队列在线程之间
Callable
s和Future
s
但我意识到,我可以简单地用匿名线程包装“工作”方法并捕获异常,因为它将在没有线程的情况下执行
(工作程序的逻辑已从实现可调用的新类移动到调用方类)
这种方法有什么问题吗?是的,只要你知道你在那些
doWork
和doSomething
方法中所做的事情,这种方法就会起作用
其他线程也可以访问数据吗?如果是这样,那么您应该考虑使用synchronized
或其他线程安全方法(如使用线程安全消息队列在线程之间传递消息)来保护它。你必须考虑什么是解决问题的最好办法
了解更多关于它所做的事情是很有趣的,因为当您将它封装在一个线程中时,您需要考虑如何以线程安全的方式从该线程获取数据。可能有一种简单而安全的方法来完成工作,但这取决于具体情况。问题是否存在取决于你试图实现的目标。为什么不希望在主线程中捕获异常?可以,也可以使用UncaughtExceptionHandler:
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{
}