定时器是一个好东西,起到了一个时时监听的作用。个人感觉拥有强大抢票功能的智行App其后台应该也使用到它的,客户端将用户的订票需求发送到其后台的服务端,服务端便为其时时监听12306的数据库变化,若有则取之。java里实现定时器大致有如下4种:
一.使用java原生库中的Timerl类
1.规定在指定时间间隔执行一次,使用时若不再使用时应该及时将定时器关闭
public static void timer1() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.PRintln("-------Xiuying,I love you!--------"); } }, 2000);// 设定指定的时间time,此处为2000毫秒 } 2.延迟定时器执行的开始,并在固定的时间间隔执行run// schedule(TimerTask task, long delay, long period)
public static void timer2() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("-------Xiuying,I love you!--------"); } }, 1000, 1000); }3.设定指定任务task在指定延迟delay后进行固定频率peroid的执行。// scheduleAtFixedRate(TimerTask task, long delay, long period) public static void timer3() { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("-------设定要指定任务--------"); } }, 1000, 2000); } 4.安排指定的任务task在指定的时间firstTime开始进行重复的固定速率period执行. // Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period) public static void timer4() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时 calendar.set(Calendar.MINUTE, 0); // 控制分 calendar.set(Calendar.SECOND, 0); // 控制秒 Date time = calendar.getTime(); // 得出执行任务的时间,此处为今天的12:00:00 Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("-------设定要指定任务--------"); } }, time, 1000 * 60 * 60 * 24);// 这里设定将延时每天固定执行 } }二.使用线程:
1.使用简单的线程加循环,再利用线程的sleep(),一直让工作在运行就行
public class Task1 { public static void main(String[] args) { // run in a second final long timeInterval = 1000; Runnable runnable = new Runnable() { public void run() { while (true) { // ------- code for task to run System.out.println("Hello !!"); // ------- ends here try { Thread.sleep(timeInterval); } catch (InterruptedException e) { e.printStackTrace(); } } } }; Thread thread = new Thread(runnable); thread.start(); } } 3.ScheduledExecutorService是从Java SE5的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式。 相比于上两个方法,它有以下好处: 1>相比于Timer的单线程,它是通过线程池的方式来执行任务的 2>可以很灵活的去设定第一次执行任务delay时间 3>提供了良好的约定,以便设定执行的时间间隔 下面是实现代码,我们通过ScheduledExecutorService#scheduleAtFixedRate展示这个例子,通过代码里参数的控制,首次执行加了delay时间。
public class Task3 { public static void main(String[] args) { Runnable runnable = new Runnable() { public void run() { // task to run goes here System.out.println("Hello !!"); } }; ScheduledExecutorService service = Executors .newSingleThreadScheduledExecutor(); // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间 service.scheduleAtFixedRate(runnable, 10, 1, TimeUnit.SECONDS); } }
新闻热点
疑难解答