您好,登录后才能下订单哦!
ScheduledExecutorService 是 Java 并发包 java.util.concurrent 中的一个接口,它允许你在给定的延迟后运行任务,或者定期执行任务
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
class MyTask implements Runnable {
@Override
public void run() {
System.out.println("任务执行于: " + LocalDateTime.now());
}
}
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
这里我们创建了一个具有单个线程的 ScheduledExecutorService。
schedule
方法延迟执行任务:long delay = 5; // 延迟时间(单位:秒)
MyTask task = new MyTask();
scheduler.schedule(task, delay, TimeUnit.SECONDS);
这将使任务在 5 秒后执行一次。
scheduleAtFixedRate
或 scheduleWithFixedDelay
方法:long initialDelay = 0; // 初始延迟时间(单位:秒)
long period = 2; // 任务执行间隔(单位:秒)
// 使用 scheduleAtFixedRate 方法
scheduler.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.SECONDS);
// 或者使用 scheduleWithFixedDelay 方法
scheduler.scheduleWithFixedDelay(task, initialDelay, period, TimeUnit.SECONDS);
scheduleAtFixedRate
方法会在固定的速率下执行任务,而 scheduleWithFixedDelay
方法会在每次任务执行完成后等待固定的延迟时间再执行下一次任务。
在不再需要执行任务时,应关闭 ScheduledExecutorService 以释放资源:
scheduler.shutdown();
注意:调用 shutdown
方法后,已提交的任务将继续执行,但不会接受新的任务。如果需要在关闭前等待正在执行的任务完成,可以使用 awaitTermination
方法:
scheduler.shutdown();
try {
if (!scheduler.awaitTermination(60, TimeUnit.SECONDS)) {
scheduler.shutdownNow();
}
} catch (InterruptedException e) {
scheduler.shutdownNow();
}
这将等待最多 60 秒,直到所有任务完成执行,或者超时发生。如果在超时时间内任务未完成,则会调用 shutdownNow
方法强制关闭 ScheduledExecutorService。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。