gpt4 book ai didi

java - 可调用和异常处理

转载 作者:行者123 更新时间:2023-12-01 04:23:52 25 4
gpt4 key购买 nike

我正在使用 ThreadPool Executor,并使用 invokeAll() 方法调用任务。在可调用的 call() 方法中,我写入数据库,但我只想在确定线程执行正常并且没有严重终止时写入。

以下解决方案是否有效:

解决方案1

我认为这不起作用,因为线程可以在数据库写入后被中断,所以我猜它不会返回结果。

public Result call() throws exception(){

...

if( !Thread.currentThread.isInterrupted() ){
//Save to the database
}

...

return result;
}

解决方案2

处理 get() 方法之后的写入,以确保它正常终止,如果我理解正确,get() 方法会重新抛出执行期间捕获的任何异常

...

for( Future f : futures){

try {

Result r = f.get();

//Do the write with the result i got
}
catch( Exception e){
//Something went wrong
}

}

提前致谢。

最佳答案

In the callable call() method i write to a database ...

在这种情况下,异常处理逻辑需要位于 call() 方法本身中;例如

public Result call() {
try {
...
if (!Thread.currentThread.isInterrupted()) {
// Save to the database
return result;
} else {
return // some result that means interrupted.
}
catch (Exception ex) {
return // some result that means failed.
}
}

尝试让主线程进行数据库保存似乎没有任何意义。

关于java - 可调用和异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com