1. 程式人生 > >定時器Timer

定時器Timer

png eth err 移除 清空 import 進程 代碼 pub

Timer類的主要作用是設置任務計劃,但是封裝任務的類卻是TimerTask類

技術分享圖片

技術分享圖片

一、如何設置計劃任務

1、執行任務時間晚於當前時間-在未來執行的效果

任務代碼

 1 package chapter06;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTask extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11 System.out.println("任務執行了,時間為:"+new Date()); 12 } 13 14 }

執行代碼

 1 package chapter06;
 2 
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.Timer;
 6 
 7 public class Test1 {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11 System.out.println("當前時間:"+new Date()); 12 13 //獲取當前時間,並在當前時間的基礎上加上10秒 14 Calendar calendarRef = Calendar.getInstance(); 15 calendarRef.add(Calendar.SECOND, 10); 16 17 // 當前延遲之後的Date 18 Date runDate = calendarRef.getTime(); 19 20
21 MyTask task = new MyTask();//任務 22 // 設置任務計劃 23 Timer timer = new Timer(); 24 timer.schedule(task, runDate); 25 } 26 27 }

2、在指定時間之後,按照指定時間間隔周期,無限循環執行某一個任務

 1 package chapter06;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTask extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11         System.out.println("任務執行了,時間為:"+new Date());
12     }
13     
14 }
 1 package chapter06;
 2 
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.Timer;
 6 
 7 public class Test2 {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         System.out.println("當前時間為:"+new Date());
12         Calendar calendarRef = Calendar.getInstance();
13         
14         calendarRef.add(Calendar.SECOND, 10);
15         Date runDate = calendarRef.getTime();
16         System.out.println("計劃時間為:"+runDate);
17         
18         MyTask task = new MyTask();
19         Timer timer = new Timer();
20         
21         timer.scheduleAtFixedRate(task, runDate, 4000);
22     }
23 
24 }

二、TimerTask類的cancel()方法和Timer類的cancel()方法

TimerTask的cancel()方法的作用是將自身湊夠任務隊列中進行清除

Timer類的cancel()方法的作用是將任務隊列的任務全部清空

TimerTask類的calcel()方法例子

 1 package chapter07;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTaskA extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11         System.out.println("A run time="+new Date());
12         this.cancel();
13         System.out.println("A任務自己移除了自己");
14     }
15     
16 }

 1 package chapter07;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTaskB extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11         System.out.println("B run timer="+new Date());
12     }
13     
14 }
 1 package chapter07;
 2 
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.Timer;
 6 
 7 public class Test {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         System.out.println("當前時間:"+new Date());
12         
13         //獲取當前時間,並在當前時間的基礎上加上10秒
14         Calendar calendarRef = Calendar.getInstance();
15         calendarRef.add(Calendar.SECOND, 10);
16         
17         // 當前延遲之後的Date
18         Date runDate = calendarRef.getTime();
19         
20         
21         MyTaskA task1 = new MyTaskA();//任務A
22         MyTaskB task2 = new MyTaskB();//任務B
23         
24         // 設置任務計劃
25         Timer timer = new Timer();
26         
27         timer.schedule(task1, runDate,4000);
28         timer.schedule(task2, runDate, 4000);
29     }
30 
31 }

技術分享圖片

Timer類的calcel()方法例子

 1 package chapter07;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTaskB extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11         System.out.println("B run timer="+new Date());
12     }
13     
14 }

 1 package chapter07;
 2 
 3 import java.util.Date;
 4 import java.util.TimerTask;
 5 
 6 public class MyTaskC extends TimerTask {
 7 
 8     @Override
 9     public void run() {
10         // TODO Auto-generated method stub
11         System.out.println("C run timer="+new Date());
12     }
13     
14 }
 1 package chapter07;
 2 
 3 import java.util.Calendar;
 4 import java.util.Date;
 5 import java.util.Timer;
 6 
 7 public class Test01 {
 8 
 9     public static void main(String[] args) {
10         // TODO Auto-generated method stub
11         System.out.println("當前時間:"+new Date());
12         
13         //獲取當前時間,並在當前時間的基礎上加上10秒
14         Calendar calendarRef = Calendar.getInstance();
15         calendarRef.add(Calendar.SECOND, 10);
16         
17         // 當前延遲之後的Date
18         Date runDate = calendarRef.getTime();
19         
20         
21         MyTaskB task1 = new MyTaskB();//任務B
22         MyTaskC task2 = new MyTaskC();//任務C
23         
24         // 設置任務計劃
25         Timer timer = new Timer();
26         
27         timer.schedule(task1, runDate,4000);
28         timer.schedule(task2, runDate, 4000);
29         
30         timer.cancel();
31     }
32 
33 }

全部任務被清除,並且進程被銷毀,按鈕由紅色變成灰色

定時器Timer