Java如何实现延迟执行代码的效果呢?
下文笔者讲述java代码延迟运行的效果分享,如下所示:
接口可以安排代码在指定的延迟或固定的时间间隔后运行一次
要在延迟之后运行一段代码,我们可以使用schedule方法:
延迟运行效果
一个任务暂停或延缓执行
Java中可使用以下方式实现延迟运行:
方式1:基于线程的方式
1.1:使用Thread.sleep的方式
1.2:使用TimeUnit.sleep的方式
方式2:基于ExecutorService方式
例:
基于线程(Thread)方式
使用Thread.sleep
使用Thread.sleep(milliseconds)来完成
try {
Thread.sleep(secondsToSleep * 2000);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
使用TimeUnit.sleep
使用TimeUnit.XXX.sleep(y)
可读性更好
其中xxx是休眠的时间单位
如SECONDS, MINUTES等
y是数量
try {
TimeUnit.SECONDS.sleep(secondsToSleep);
} catch (InterruptedException ie) {
Thread.currentThread().interrupt();
}
使用基于线程方式有几个缺点:
休眠时间不精确,当时间增量较小时,如毫秒、纳秒。
当在循环内部使用,休眠在循环迭代之间会稍微漂移
因为其他代码执行导致多次迭代后执行时间不够精确。
基于ExecutorService方法
Java提供了ScheduledExecutorService接口是更强大、精确的解决方案接口可以安排代码在指定的延迟或固定的时间间隔后运行一次
要在延迟之后运行一段代码,我们可以使用schedule方法:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.schedule(Classname::someTask, delayInSeconds, TimeUnit.SECONDS);
Classname::someTask 部分是指定特定方法延迟执行
someTask是执行方法的名称
Classname是包括someTask方法的类名称
以固定时间间隔执行,可以使用scheduleAtFixedRate:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(Classname::someTask, 0, delayInSeconds, TimeUnit.SECONDS);
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


