第5章 定时器Timer
第5章 定時器Timer
標簽: Java多線程編程
《Java多線程編程核心技術(shù)》 個人筆記
第5章 定時器Timer
定時器Timer的使用
方法scheduleTimerTask task Date time的測試
方法scheduleTimerTask task Date firstTime long period的測試
方法scheduleTimerTask task long delay的測試
方法scheduleTimerTask task long delay long period的測試
方法scheduleAtFixedRateTimerTask task Date firstTime long period的測試
追趕性
本章著重掌握一下技術(shù)點:
定時器Timer的使用
在JDK庫中Timer類主要負責計劃任務(wù)的功能,也就是在指定的時間開始執(zhí)行某一個任務(wù)。
Timer類的主要作用就是設(shè)置計劃任務(wù),但封裝任務(wù)的類卻是TimerTask類
方法schedule(TimerTask task, Date time)的測試
該方法的作用是在指定的日期執(zhí)行一次某一任務(wù)
public class Run1 {
private static Timer timer = new Timer(); //定時器
static public class MyTask extends TimerTask { //任務(wù)類br/>@Override
public void run() {
System.out.println("運行了!時間為:" + new Date());
}
}
public static void main(String[] args) {
try {
MyTask task = new MyTask();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2014-10-12 11:55:00";
}
將定時器設(shè)置為守護線程,構(gòu)造參數(shù)傳入true:private static Timer timer = new Timer(True);
如果計劃時間早于當前時間,則立刻執(zhí)行task任務(wù)
Timer中允許有多個TimerTask任務(wù)
public static void main(String[] args) {
try {
MyTask1 task1 = new MyTask1();
MyTask2 task2 = new MyTask2();
TimerTask是以隊列的方式一個一個被順序執(zhí)行的,所以執(zhí)行的時間有可能和預(yù)期的時間不一致,因為前面的任務(wù)有可能消耗的時間較長,則后面的任務(wù)運行的時間也會被延遲
方法schedule(TimerTask task, Date firstTime, long period)的測試
該方法的作用是在指定的日期之后,按指定的建個周期性地無限循環(huán)地執(zhí)行某一任務(wù)
timer.schedule(task, dateRef, 4000); //每隔4秒執(zhí)行一次
TimerTask類的方法cancel()的作用是將自身從任務(wù)隊列中清除,其他任務(wù)不受影響
static public class MyTaskA extends TimerTask {@Overridepublic void run() {System.out.println("A運行了!時間為:" + new Date());this.cancel();} }和TimerTask類的方法cancel()不同,Timer類中的cancel()方法的作用是將任務(wù)隊列中的全部任務(wù)清空,并且進程被銷毀
private static Timer timer = new Timer();
static public class MyTaskA extends TimerTask {br/>@Override
public void run() {
System.out.println("A運行了!時間為:" + new Date());
timer.cancel(); //全部清空
}
}
因為Timer類中的cancel()放油有時并沒有強盜queue鎖,所以有時并不一定會停止執(zhí)行計劃任務(wù)
方法schedule(TimerTask task, long delay)的測試
該方法是以執(zhí)行schedule(TimerTask task, long delay)方法當前的時間為參考時間,在此時間基礎(chǔ)上延遲指定的毫秒數(shù)后執(zhí)行一次TimerTask任務(wù)
public static void main(String[] args) {MyTask task = new MyTask();Timer timer = new Timer();System.out.println("當前時間:" + new Date().toLocaleString());timer.schedule(task, 7000); }方法schedule(TimerTask task, long delay, long period)的測試
該方法的作用是以執(zhí)行schedule(TimerTask task, long delay, long period)方法當前的時間為參考時間,在此時間基礎(chǔ)上延遲指定的毫秒數(shù),再以某一間隔時間無線次數(shù)地執(zhí)行某一任務(wù)
public static void main(String[] args) {MyTask task = new MyTask();Timer timer = new Timer();System.out.println("當前時間:"+new Date().toLocaleString());timer.schedule(task, 3000,5000); }方法scheduleAtFixedRate(TimerTask task, Date firstTime, long period)的測試
使用schedule方法:如果執(zhí)行任務(wù)的時間沒有被延時,那么下一次任務(wù)的執(zhí)行時間參考的是上一次任務(wù)的“開始”時的時間來計算
使用scheduleAtFixedRate方法:如果執(zhí)行任務(wù)的時間沒有被延時,那么下一次任務(wù)的執(zhí)行時間參考的是上一次任務(wù)的“結(jié)束”的時間來計算
延時則沒有區(qū)別,都是參考上一次任務(wù)“結(jié)束”時的時間來計算
追趕性
轉(zhuǎn)載于:https://blog.51cto.com/13545923/2053316
總結(jié)
以上是生活随笔為你收集整理的第5章 定时器Timer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直接打开php非法请求
- 下一篇: 【IneliJ 】使用IneliJ ID