在计时器的运行方法中调用的方法返回我需要在上游使用的值



我有以下计时器代码,并且基于run方法的执行,无论它是否成功,我都想返回一个布尔值。

但是我收到错误消息: 在封闭作用域中定义的局部变量连接必须是最终的或有效的最终的。

我该如何解决这个问题来实现我想要的? 这是代码:

private boolean getSwitchesOnRc(NamedPipeClient pipe, DV_RC_EntryPoint rc_EntryPoint, int allowedAttempts, int counter){
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
boolean connected = false;
ScheduledFuture<?> countdown = scheduler.schedule(new Runnable() {
@Override
public void run() {
connected = attemptRetrievalOfSwitches(pipe, rc_EntryPoint, allowedAttempts, counter);
}}, 1, TimeUnit.MINUTES);

return connected; 
}

只需使用可调用而不是 Runnable:

<V> ScheduledFuture<V>  schedule​(Callable<V> callable, long delay, TimeUnit unit)  
Creates and executes a ScheduledFuture that becomes enabled after the given delay.

主要区别在于,Callable 可以返回值(直接通过调用 return 语句(。

然后代替

return connected; 

将是

return countdown.get();

你需要调度一个可调用的而不是一个可运行的来做到这一点。

这将执行您想要的操作:

ScheduledFuture<Boolean> countdown = scheduler.schedule(new Callable<Boolean>() {
public Boolean call() {
return attemptRetrieval(...);
}}, 1, TimeUnit.MINUTES);
return countdown.get();

请注意,此方法将阻止,直到计划的调用完成。

相关内容

  • 没有找到相关文章

最新更新