如何以固定费率线程加入计划

时间:2014-10-11 08:55:32

标签: java concurrency

如果您有通过scheduleAtFixedRate提交的执行者服务,例如此

public void methodName() {
    executorService.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            //do some operations
            //getSomeResults()
        }

    }, x, y, TimeUnit.SECONDS);
}

是否可以加入另一个负责getSomeResults()的线程?例如,我希望线程在继续之前等待getSomeResults()完成 - 这可能吗?

由于

1 个答案:

答案 0 :(得分:0)

是的,您想提交FutureTask而不是Runnable。 (FutureTaskRunnable,因此您无需更改任何其他内容。)

如果你创建一个FutureTask,那么你可以让另一个线程调用它的.get()方法,该方法将阻塞直到任务完成,并且它将返回结果。

(最简洁的方法是完全摆脱getSomeResults()方法,只使用get() FutureTask方法;但没有什么可以阻止你更多地删除代码或尽管不是这样,只是使用get()作为一种阻止方式,如果你想先尝试检查它是否全部正常工作。)