以前都是使用JQuery的定时器,就在前几天面试的时候面试官问我,电影院管理系统,用户下订单后,但没有结算,如何使用Java判断15分钟之内没有结算,然后删除这个订单。
我不知道,所以回去后查了查,发现了觉得挺好用的两种方式:
package com.timer;
import java.util.Timer;
import java.util.TimerTask;
public class TimerRealizeWay {
//线程sleep时间
private static final long durationTime = 1000;
//进行到的时间
private static final Integer[] startTime = {0};
//结束时间
private static long endTime = 10 * 1000;
//订单结算状态
private static byte orderState = 1;
public static void main(String[] args) {
//ordinaryThread();
//timerTask();
}
/**
* 创建一个线程,然后让他在while循环里边一直运行着,
* 然后通过sleep方法来达到定时器的效果
*/
public static void ordinaryThread() {
Runnable runnable = TimerRealizeWay::timerContent;
Thread thread = new Thread(runnable);
thread.start();
}
/**
* 使用TimerTask
*/
public static void timerTask() {
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
timerContent();
}
};
Timer timer = new Timer();
//调用一个定时任务,经过0毫秒之后调度,仅仅调度一次
timer.schedule(timerTask, 0);
}
/**
* 定时器的具体内容
*/
public static void timerContent() {
while (orderState == 1) {
if (endTime == startTime[0]) {
System.out.println(startTime[0]);
System.out.println("已经超过订单结算时间,无法结算。");
orderState = 0;
return;
}
System.out.println("未超过订单的结算时间,可以结算。");
try {
Thread.sleep(durationTime);
startTime[0] += 1000;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}