Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 - Fatal编程技术网

Java 如何在可调用数据库中进行异常处理

Java 如何在可调用数据库中进行异常处理,java,multithreading,Java,Multithreading,我知道callable的调用可以向调用它的父方法抛出异常,而runnable则不是这样 我想知道为什么,因为它是一个线程方法,是线程堆栈中最底层的方法 的要点是将异常抛出到调用线程中,例如,当您获得一个未来的结果时,您将可调用的 public class CallableClass implements Callable<String> { ... } ExecutorService executor = new ScheduledThreadPoolExecutor(5); Fu

我知道callable的调用可以向调用它的父方法抛出异常,而runnable则不是这样

我想知道为什么,因为它是一个线程方法,是线程堆栈中最底层的方法

的要点是将异常抛出到调用线程中,例如,当您获得一个
未来的
结果时,您将
可调用的

public class CallableClass implements Callable<String> {
...
}

ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);

try {
    System.out.println(future.get());
} catch (Exception e) {
    // do something
}
public类CallableClass实现可调用{
...
}
ExecutorService executor=新的ScheduledThreadPoolExecutor(5);
未来=执行人提交(可调用);
试一试{
System.out.println(future.get());
}捕获(例外e){
//做点什么
}
Callable.call()
不能是最底层的堆栈帧。它总是由另一个方法调用,然后该方法将捕获异常
Callable
通常用于异步计算值,然后使用
Future
对象获取值。该操作可能会引发异常,稍后当您尝试获取
未来的
值时,该异常将被重试


Runnable
只是运行一个不返回任何内容的操作。所有异常处理都应该在
Runnable
中完成,因为不清楚如何处理
Runnable.run()中抛出的异常。(可调用的
异常
通常与
未来
一起返回给调用方)

我不确定您的问题是什么。它是关于类的实现,它重新引发一个由可调用的抛出的异常吗?不是。我简单的怀疑是,当可调用的抛出一个异常时,谁会捕获它。如果Callable的call方法中的异常可以抛出,那么为什么不Runnable的Runnable抛出一个exceptionRunnable在单独的线程中运行(因此得名)。不可调用(因此得名)。事实上,您可以从Runnable中抛出异常,但是没有什么可以处理它(除了JVM的“shoot me”处理程序).非常感谢..真是太好了helpful@KanagaveluSugumar
executor
中的
submit
函数支持
Callable
sma我知道哪个方法捕获可调用异常,因为据我所知,当线程启动时调用callable,call是占用调用堆栈的第一个方法。如果我错了,请纠正我。@user1649415,正如我在回答
callable中所说的那样。call()
不能是占用调用堆栈的第一个方法。它总是在其他地方调用,如果它抛出异常,通常会捕获该异常,然后如果您试图获取
未来的值,则会重新调用该异常。