- 所有超级接口:
AutoCloseable,Executor,ExecutorService,IExecutor,IExecutorService,IScheduledExecutorService,ScheduledExecutorService,UniExecutorService
@NotThreadSafe
public interface UniScheduledExecutor
extends UniExecutorService, IScheduledExecutorService
定时任务调度器,时间单位取决于具体的实现,通常是毫秒 -- 也可能是帧数。
时序保证
1. 单次执行的任务之间,有严格的时序保证,当过期时间(超时时间)相同时,先提交的一定先执行。 2. 周期性执行的的任务,仅首次执行具备时序保证,当进入周期运行时,与其它任务之间便不具备时序保证。避免死循环
子类实现必须在保证时序的条件下解决可能的死循环问题。 Q: 死循环是如何产生的? A: 对于周期性任务,我们严格要求了周期间隔大于0,因此周期性的任务不会引发无限循环问题。 但如果用户基于IScheduledExecutorService.schedule(Runnable, long, TimeUnit)实现循环,则在执行回调时可能添加一个立即执行的task(超时时间小于等于0),则可能陷入死循环。
这种情况一般不是有意为之,而是某些特殊情况下产生的,比如:下次执行的延迟是计算出来的,而算出来的延迟总是为0或负数(线程缓存了时间戳,导致计算结果同一帧不会变化)。
如果很好的限制了单帧执行的任务数,可以避免死循环。不过,错误的调用仍然可能导致其它任务得不到执行。- 作者:
- wjybxx date 2023/4/3
-
方法概要
从接口继承的方法 java.util.concurrent.ExecutorService
close从接口继承的方法 cn.wjybxx.concurrent.IExecutorService
awaitTermination, isShutdown, isShuttingDown, isTerminated, newPromise, shutdown, shutdownNow, submit, submit, submit, submit, submitAction, submitAction, submitAction, submitAction, submitFunc, submitFunc, submitFunc, submitFunc, terminationFuture从接口继承的方法 cn.wjybxx.concurrent.IScheduledExecutorService
newScheduledPromise, schedule, schedule, schedule, scheduleAction, scheduleAtFixedRate, scheduleFunc, scheduleWithFixedDelay从接口继承的方法 cn.wjybxx.sequential.UniExecutorService
invokeAll, invokeAll, invokeAny, invokeAny, needMoreUpdate, update