定時器
? ? ? ? 約定一個時間,時間到了,執行某個代碼邏輯(進行網絡通信時常見)
? ? ? ? 客戶端給服務器發送請求 之后就需要等待 服務器的響應,客戶端不可能無限的等,需要一個最大的期限。這里“等待的最大時間”可以用定時器的方式實現。
? ? ? ? 標準庫中有現成的定時器實現:
? ? ? ? ?
主線程執行schedule方法的時候,就是把這個任務放到timer對象中。
timer里面本身也含一個線程——>"掃描線程"
時間到了,掃描線程就會執行剛才安排的任務
執行完任務之后,進程并未結束,timer內部的線程阻止了進程的結束。
timer里面也可安排多個任務
public class Demo28 {public static void main(String[] args) {Timer timer = new Timer();timer.schedule(new TimerTask() {public void run() {System.out.println("執行第四個任務");}},4000);timer.schedule(new TimerTask() {public void run() {System.out.println("執行第三個任務");}},3000);timer.schedule(new TimerTask() {public void run() {System.out.println("執行第二個任務");}},2000);timer.schedule(new TimerTask() {public void run() {System.out.println("執行第一個任務");}},1000);System.out.println("程序啟動!");}
}
阻止結束,但是我們可以加timer自帶的cancel()方法來結束線程
自己實現一個定時器
1.Timer里面需要有一個線程,掃描任務是否到時間
2.需要有一個數據結構來保存所有的任務
3.需要創建一個類,通過類的對象來描述一個任務。(至少包括任務的內容和時間)
由于任務都帶有一個時間的先后順序,所以我們采用優先級隊列的數據結構來實現。