Ove*_*esh 20 java multithreading timer
使用时
Timer.schedule(TimerTask task, long delay, long period)
(即具有固定延迟执行),如果指定TimerTask
的run()
方法花费的时间超过period
完成时会发生什么?是否有可能TimerTask
因为这个而运行两个并发线程?如果是这样,有没有办法避免它?
ska*_*man 16
Timer
并且TimerTask
不要很好地处理这种情况.如果你想更好地处理它,那么不要使用这些类.
java.util.concurrent.ScheduledExecutorService
提供了两个调度方法,scheduleAtFixedRate
并且scheduledWithFixedDelay
,支配时会发生什么任务"聚成一团".
scheduleAtFixedRate
:
创建并执行一个周期性操作,该操作在给定的初始延迟后首先启用,然后在给定的时间段内启用; 即执行将在initialDelay之后开始,然后是initialDelay + period,然后是initialDelay + 2*period,依此类推.如果任务的任何执行遇到异常,则后续执行被禁止.否则,任务将仅通过取消或终止执行者来终止.如果此任务的执行时间超过其周期,则后续执行可能会延迟,但不会同时执行.
scheduleWithFixedDelay
:
创建并执行一个周期性动作,该动作在给定的初始延迟之后首先被启用,并且随后在一次执行的终止和下一次执行的开始之间给定延迟.如果任务的任何执行遇到异常,则后续执行被禁止.否则,任务将仅通过取消或终止执行者来终止.
您可以ScheduledExecutorService
使用Executors
工厂类创建实例.
归档时间: |
|
查看次数: |
7946 次 |
最近记录: |