Java 定时器4种使用方式
2016-12-01 14:06
363 查看
package javatest.timetest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * Java 定时器的使用 * Created by Lovell on 01/12/2016. */ /* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@ @@ @@ @@@@ @@@@ @@@@@@@@ @@@@ @@ @@@ @@@ @@@@ @@@ @@ @@@@ @@ @@@@ @@@ @@@@ @@@@ @@ @@@@ @@ @@@ @@@ @@@@ @@ @@ @@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ */ public class TimeTest { public static void main(String[] args) throws ParseException { // timer1(); // timer2(); // timer3(); // timer4(); timer5(); } // 第一种方法:设定指定任务task在指定时间time执行 schedule(TimerTask task, Date time) public static void timer1() { Timer timer = new Timer(); timer.schedule(new TimerTask() { public void run() { System.out.println("-------设定要指定任务--------"); } }, 2000);// 设定指定的时间time,此处为2000毫秒 } // 第二种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行 // 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("-------设定要指定任务--------"); } }, 1000, 5000); } // 第三种方法:设定指定任务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); } // 第四种方法:安排指定的任务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);// 这里设定将延时每天固定执行 } /** * timer的缺点: *(1)Timer对调度的支持是基于绝对时间,而不是相对时间的,由此任务对系统时钟的改变是敏感的; *(2)所有的TimerTask只有一个线程TimerThread来执行,因此同一时刻只有一个TimerTask在执行; *(3)Timer线程并不捕获异常,所以任何一个TimerTask的执行异常都会导致Timer终止所有任务; * 这种情况下,Timer也不会再重新恢复线程的执行了;它错误的认为整个Timer都被取消了。 * 此时,已经被安排但尚未执行的TimerTask永远不会再执行了,新的任务也不能被调度了。 * @throws ParseException */ private static void timer5() throws ParseException { Timer myTimer = new Timer(); myTimer.schedule(new TimerTask() { @Override public void run() { System.out.println("1s后执行"); } }, 1000);//1秒后执行 // 2016-12-01 14:33:00执行 myTimer.schedule(new TimerTask() { @Override public void run() { } }, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00")); myTimer.schedule(new TimerTask() { @Override public void run() { System.out.println("5秒后执行,每一秒执行一次"); } }, 5000, 1000);//5秒后执行 每一秒执行一次 // 2016-12-01 14:30:00执行一次 以后每秒执行一次,如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务 myTimer.schedule(new TimerTask() { @Override public void run() { System.out.println(" 2016-12-01 14:30:00执行一次 以后每秒执行一次,如果设定的时间点在当前时间之前,任务会被马上执行,然后开始按照设定的周期定时执行任务"); } }, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00"), 1000); myTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("5秒后执行 每一秒执行一次 如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点"); } }, 5000, 1000);//5秒后执行 每一秒执行一次 如果该任务因为某些原因(例如垃圾收集)而延迟执行,那么接下来的任务会尽可能的快速执行,以赶上特定的时间点 myTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("和上个类似"); } }, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2016-12-01 14:33:00"), 1000);//和上个类似 } }
相关文章推荐
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式(delay,period)
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的4种使用方式
- java当中的定时器的几种使用方式
- Android界面设计的4种方式之三——使用XML和JAVA代码混合控制UI界面
- Java多线程学习笔记1——线程的实现方式以及定时器的使用
- 使用Spring的Quartz方式实现Java定时器功能
- JAVA中定时器的使用方式
- 两种方式实现java定时器,使用quartz定时器框架和java自带Timer定时器,编写定时任务