Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用匿名线程捕获异常_Java_Multithreading_Exception Handling_Checked Exceptions - Fatal编程技术网

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{
}