我通过以下方式定义了Future:
Future<?> future = null;
ExecutorService service = null;
首先我用过(只是为了了解这些东西而玩):
future = service.submit(() -> {
for (int i = 0; i < 5; ++i) {
System.out.println("Printing record old: " + i);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// Ignore
}
}
});
但是我真的不喜欢try catch部分,因此我将其重写为:
future = service.submit(() -> {
for (int i = 0; i < 5; ++i) {
System.out.println("Printing record: " + i);
Thread.sleep(5);
}
return "Done";
});
通过这种方式,可以使用Callable而不是Runnable,而且我不需要捕获。但是我返回了一个未使用的值。
可以这样做吗?还是有更好的方法?
答案 0 :(得分:1)
这是因为方法语法
Runnable Runnable
类run
方法不会引发任何异常,因此您需要使用try catch处理任何已检查的异常
void run()
Callable但是Callable
类call
方法抛出Exception
,因此您可以使用try catch
进行处理,也可以离开JVM
V call() throws Exception
答案 1 :(得分:0)
使用Callable
时,如果引发异常,则在调用future.get()时会得到ExecutionException
。
此异常将包装您的可调用对象引发的异常,并且可以由getCause()
在此处查看更多信息:https://www.baeldung.com/java-runnable-callable
因此,您并没有真正避免尝试/捕获,只需将其移动到其他地方(这很有意义-您需要在某个地方处理它...)