定时器Timer 与 TimerTask
定时器在业务中有不可缺少的作用,根据业务需求来使用......
方式一
指定时间做某一件是,只执行一次
//指定时间做某一件是,只执行一次
public static void main(String[] args) throws ParseException {
Timer mTimer = new Timer();
String time = "2021-08-18 21:22:00";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date parse = sdf.parse(time);
mTimer.schedule(new Test01(mTimer), parse);
}
}
class Test01 extends TimerTask {
Timer timer = null;
public Test01() {
}
public Test01(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
System.out.println("执行");
//执行完任务后终止该计时器
timer.cancel();
}
方式二
在指定延迟后执行指定的任务,只执行一次
//在指定延迟后执行指定的任务,只执行一次
public static void main(String[] args) {
Timer mTimer = new Timer();
//延迟一秒后执行任务; 1000=1秒,单位:毫秒
mTimer.schedule(new Test02(mTimer), 3000);
}
}
class Test02 extends TimerTask {
Timer timer = null;
public Test02() {
}
public Test02(Timer timer) {
this.timer = timer;
}
@Override
public void run() {
System.out.println("执行");
//执行完任务后终止该计时器
timer.cancel();
}
方式三
指定的任务在指定的延迟后开始进行重复的固定延迟执行:
//指定的任务在指定的延迟后开始进行重复的固定延迟执行:
public static void main(String[] args) {
Timer mTimer = new Timer();
//延迟一秒后执行任务,每个一秒执行一次
mTimer.schedule(new Test03(), 0, 1000);
}
}
class Test03 extends TimerTask {
@Override
public void run() {
System.out.println("执行");
}
附加
public static void main(String[] args) {
//Runnable:实现了Runnable接口,jdk就知道这个类是一个线程
Runnable runnable = new Runnable() {
//创建 run 方法
public void run() {
// task to run goes here
System.out.println("Hello, stranger");
}
};
// ScheduledExecutorService:是从Java SE5的java.util.concurrent里,
// 做为并发工具类被引进的,这是最理想的定时任务实现方式。
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
// 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间
// 10:秒 5:秒
// 第一次执行的时间为2秒,然后每隔1秒执行一次
service.scheduleAtFixedRate(runnable, 2, 1, TimeUnit.SECONDS);
}
方式四
指定延迟时间开始执行重复的操作(指定重复操作多少次后,再指定执行你想要的任务后停止定时器)
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
int times = 0;
public void run() {
times = times + 1;
if (times >= 10) {
times = 0;
//一分钟后自动取消转单
timer.cancel();
}
log.info("Timer执行-->{}", times + "次");
}
}, 0, 1000);
}
Timer+TimerTask
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String time= "2022-07-27 10:13:44"; try { Date parse = sdf.parse(time); System.out.println("达到此时间执行......" +parse); new Timer().schedule(new TimerTask(){ public void run(){ System.out.println("task run..."); System.exit(0); } }, parse); } catch (ParseException e) { e.printStackTrace(); } }