JUC--黑马|JUC并发编程 -- 线程池应用之定时任务(在每周周四执行定时任务)
1. 线程池应用之定时任务
【JUC--黑马|JUC并发编程 -- 线程池应用之定时任务(在每周周四执行定时任务)】示例: 在每周周四执行定时任务
package com.tian;
import java.time.DayOfWeek;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestSchedule {private static LocalDateTime nowTime;
// 如何让每周四 18:00:00 定时执行任务?
public static void main(String[] args) {LocalDateTime nextThursdayTime = getTheTimeOfNextThursday();
// initailDelay 代表当前时间和周四的时间差
// period 一周的间隔时间
long initailDelay = Duration.between(nowTime, nextThursdayTime).toMillis();
long period = 1000 * 60 * 60 * 24 * 7;
ScheduledExecutorService pool = Executors.newScheduledThreadPool(1);
pool.scheduleAtFixedRate(() -> {System.out.println("running...");
}, initailDelay, period, TimeUnit.MILLISECONDS);
}/**
* 获取下周周四时间
*/
public static LocalDateTime getTheTimeOfNextThursday() {//获取当前时间
nowTime = LocalDateTime.now();
// 获取周四时间
LocalDateTime time = nowTime.withHour(18).withMinute(0).withSecond(0).withNano(0).with(DayOfWeek.THURSDAY);
// 如果 当前时间 > 本周周四
if (nowTime.compareTo(time) > 0) {// time 加 1周, 为下周周四
time = time.plusWeeks(1);
}
return time;
}
}
推荐阅读
- JUC中ReentrantLock和AbstractQueuedSynchronizer原理解析
- JUC--CLH同步队列
- 【黑马程序员】永不凋零的蓝莲花
- Java|Java JUC ConcurrentLinkedQueue解析
- 【JUC】ArrayBlockingQueue之Condition应用
- 【JUC】CountDownLatch共享节点队列
- Java|Java JUC ReentrantReadWriteLock解析
- 【JUC】两图理解Condition的等待、唤醒逻辑
- 黑马头条-2020版-前端部分-前端项目初始化.p001
- Java JUC LockSupport概述