关于ScheduledExecutorService.shceduleAtFixedRate的问题-我安排taskA运行每500个millis,这为1000 millis块。现在,接下来的处决将不再等待额外的500米利斯,而是在前一次执行之后立即开始。
taskA获得一个内部锁,这个锁也是由另一个线程(尝试)获得的。由于内部锁没有公平性保证,这个线程面临饥饿的风险,所以我的问题是:有一个好的/干净的方法来避免这种风险吗?把任务安排为每1500米跑一次(听起来不太防水)?还是我们期望锁的收购表现出一种“摊销公平”?
发布于 2019-02-12 15:56:33
是的,你可以使用scheduleWithFixedDelay
创建并执行一个周期性操作,该操作首先在给定的初始延迟之后启用,然后在一次执行的结束到下一次的开始之间使用给定的延迟。如果任务的任何执行遇到异常,则随后的执行将被抑制。否则,任务将仅通过取消或终止执行器来终止。
所以你给的延迟是下一次开始的最后一次结束之间的时间--即运行之间没有重叠。
https://stackoverflow.com/questions/54653975
复制相似问题