1.定时任务线程
ScheduledExecutorService
class MyScheduledThreadPool {
public static void main(String[] args) {
//给定大小的线程数
ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10);
System.out.println(new Date());
System.out.println("---");
executorService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println(new Date());
}
}, 5, 2, TimeUnit.SECONDS);
各参数:自当前起 ,5秒后开始执行 ,之后每2秒执行一次(无限次执行), TimeUnit.SECONDS : 时间单位
运行结果
2.Timer类
(1)自当前起,再指定毫秒后,线程运行一次(只执行一次)
class MyScheduledThreadPool {
public static void main(String[] args) {
Timer timer=new Timer();
System.out.println(new Date());
System.out.println("---");
timer.schedule(new TimerTask(){
@Override
public void run() {
System.out.println(new Date());
}
},2000);
(2)public void schedule(TimerTask task, Date time);
指定日期执行, 如果指定日期比当前日期要早 , 那么会立刻执行
public static void main(String []args) {
try {
Timer timer = new Timer();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2020-6-6 22:04:00";
Date dateRef = sdf.parse(dateString);
System.out.println("字符串时间:" + dateRef +",当前时间:" + new Date());
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("任务运行了:,当前时间:" + new Date());
timer.cancel();
}
}, dateRef);
} catch (ParseException e) {
e.printStackTrace();
}
}
(3)public void schedule(TimerTask task, long delay, long period)
以当前时间为参考,在延迟delay毫秒后,再以每period毫秒执行(无限次执行)
public static void main(String []args) {
Timer timer = new Timer();
System.out.println( new Date());
System.out.println("---");
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println( new Date());
}
}, 2000, 2000);
}
(4)public void schedule(TimerTask task, Date firstTime, long period)
在指定日期开始 , 以每period毫秒执行(无限次执行)
如果, 给定 时间早于当前时间,那么会立即执行
public static void main(String []args) {
try {
Timer timer = new Timer();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2020-6-6 22:16:00";
Date dateRef = sdf.parse(dateString);
System.out.println("字符串时间:" + dateRef +",当前时间:" + new Date());
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("任务运行了:,当前时间:" + new Date());
}
}, dateRef, 2000);
} catch (ParseException e) {
e.printStackTrace();
}
}