如何从线程中抛出异常?

Sky*_*ion 1 java multithreading exception

我需要抛出异常.唯一的问题是从方法内部启动的线程抛出异常.

这是我的意思的一个例子:

public void connectToWebsite(String URL){
    new Thread(){
        @Override
        public void run(){
           openURLConnection(URL);//Throws Malformed URL and IO Exception
        }
   };
}
Run Code Online (Sandbox Code Playgroud)

这是API的一部分,因此我想允许API的用户处理他们如何选择的异常.但是,我无法connectToWebsite(url)抛出异常,因为在运行中抛出了异常.我无法run()抛出异常,因为它不会覆盖run方法.有没有办法可以在不构建整个新线程类的情况下抛出异常?或者我是否应该坚持用printStackTraces 添加一个捕获?

理想情况下,我想connectToWebsite抛出异常并让用户处理它.但是,这甚至可能吗?如果是这样,怎么样?如果我不能或不应该抛出异常,我应该如何通知用户出错的地方?

Gra*_*ray 5

有没有办法可以在不构建整个新线程类的情况下抛出异常?或者我应该选择使用printStackTraces添加一个catch?

你可以做几件事.最好的可能是切换到使用an ExecutorServiceCallable不是runnable.您可以将您Callable的提交ExecutorService返回给Future.当您调用future.get()它时,如果您的call()方法引发异常,则会抛出异常.它实际上会抛出ExecutionException,异常的原因将是抛出的异常call().

你也可以使用UncaughtExceptionHandler和设置它Thread.然后,如果您进行线程抛出,则将使用异常调用该处理程序.