Java实现定时任务的三种简单方法

时间:2021-02-22 07:51:28

第一种方法:

    /**
* 先定义一个任务每天执行的时间点,再写一个死循环,不断地拿当前时间和事先定义的时间去比对,若到时间则执行任务
*/
@Test
public void test1() {
String taskTime
= "13:43:10";
SimpleDateFormat sdf
= new SimpleDateFormat("HH:mm:ss");
while (true) {
Date date
= new Date();
if (sdf.format(date).equals(taskTime)) {
System.out.println(
"任务开始执行!");
try {
// 这里让线程睡眠一秒钟的原因是:若任务在1秒内执行完的话,会导致任务执行多遍,
// 任务执行完睡眠一秒钟,保证任务不会重复执行
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

第二种方法:若想测试,请一定用main方法,Test不行

    /**
* 利用ScheduledExecutorService这个接口实现
*/
public static void main(String[] args) {
Runnable runnable
= new Runnable() {

@Override
public void run() {
System.out.println(
"任务开始执行!");

}
};
ScheduledExecutorService sch
= Executors.newSingleThreadScheduledExecutor();
// 第一个参数是要执行的线程
// 第二个参数是初始延迟时间
// 第三个参数是任务执行的间隔时间
// 第四个参数是计时单位,可以是时分秒等
sch.scheduleAtFixedRate(runnable, 10, 2, TimeUnit.SECONDS);
}

第三种方法:若想测试,请一定用main方法,Test不行

public static void main(String[] args) {
TimerTask task
= new TimerTask() {

@Override
public void run() {
System.out.println(
"任务开始执行!");

}
};
Calendar cal
= Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
cal.set(year, month, day,
14, 1, 0);
Date date
= cal.getTime();
Timer timer
= new Timer();
timer.schedule(task, date,
2000);
}