我正在尝试使用Java Concurrency包执行定期操作,我使用以下代码:
ScheduledExecutorService daemon = Executors.newScheduledThreadPool(1);
daemon.scheduleWithFixedDelay(new AddressThread(ParentMap.getSingletonInstance(), dictionary, test),10, 10, TimeUnit.SECONDS);
其中AddressThread
是传递的Runnable
类型。代码每10秒执行一次run()
,它正如我所期望的那样工作。但是,我需要返回一个值,run()
不允许我这样做。是否有类似scheduleWithFixedDelay的方法,我可以传递Callable
接口而不是Runnable
并返回一些东西?如果没有,如果我想返回一个值,我怎么能做上面那样的东西?
答案 0 :(得分:0)
问题是你想在哪里处理结果。如果您的任务执行一次,您将从返回的ScheduledFuture
获得任务的结果(请参阅此处:here)
如果您有几个电话,没有人能够区分返回值何时可用。
你可以实现一个监听器并在任务结束时调用它,我们你有一个单独的线程,等待结果可用,处理它然后安排下一次执行。
答案 1 :(得分:0)
我希望阅读这个问题的答案对你有用。