import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
/**
* 定时任务测试类
*
* @author KindredEH
* @since 2022-05-06 10:18
*/
public class Test {
public static void main(String[] args) {
//线程工厂
ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("demo-%d").build();
//创建定时任务线程池
ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(2,threadFactory);
//每天执行
long oneDay = 24 * 60 * 60 * 1000;
//执行时间
long initialDelay = getTimeMillis("11:31:00") - System.currentTimeMillis();
initialDelay = initialDelay > 0 ? initialDelay : initialDelay + oneDay;
//按计划执行
executorService.scheduleAtFixedRate(() -> {
System.out.println("执行任务1,线程名:" + Thread.currentThread().getName());
System.out.println("执行任务2,线程名:" + Thread.currentThread().getName());
}, initialDelay, oneDay, TimeUnit.MILLISECONDS);
}
/**
* 获取指定时间对应的毫秒数
*
* @return long
*/
private static long getTimeMillis(String time) {
try {
DateFormat dateFormat = new SimpleDateFormat("yy-MM-dd HH:mm:ss");
DateFormat dayFormat = new SimpleDateFormat("yy-MM-dd");
Date curDate = dateFormat.parse(dayFormat.format(new Date()) + " " + time);
return curDate.getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
}
ScheduledThreadPoolExecutor 定时任务
于 2022-05-06 11:23:26 首次发布