คลาส Timer ใช้จัดตารางงาน (schedule) ให้รันในเวลาที่กำหนดครั้งเดียวหรือซ้ำๆ สามารถรันในพื้นหลังเป็น daemon thread ได้ด้วย เพื่อเชื่อม Timer กับ daemon thread มี constructor ที่รับค่า boolean Timer จัดตารางงานด้วย fixed delay และ fixed rate ใน fixed delay หากการรันใดล่าช้าจาก System GC การรันถัดไปก็จะล่าช้าตามไปด้วย ทุกครั้งล่าช้าตามครั้งก่อนหน้า ใน fixed rate หากการรันใดล่าช้าจาก System GC แล้ว 2-3 การรันจะเกิดขึ้นติดต่อกันเพื่อชดเชย fixed rate ตามเวลาเริ่มต้นของครั้งแรก คลาส Timer มีเมธอด cancel() เพื่อยกเลิก timer เมื่อเรียกเมธอดนี้ Timer จะถูก terminated คลาส Timer รันได้เฉพาะ task ที่ implement TimerTask
ตัวอย่าง
import java.util.*;
public class TimerThreadTest {
public static void main(String[] args) {
Task t1 = new Task("Task 1");
Task t2 = new Task("Task 2");
Timer t = new Timer();
t.schedule(t1, 10000); // รันทุก 10 วินาที
t.schedule(t2, 1000, 2000); // รันทุก 2 วินาที
}
}
class Task extends TimerTask {
private String name;
public Task(String name) {
this.name = name;
}
public void run() {
System.out.println("[" + new Date() + "] " + name + ": task executed!");
}
}
Output
[Thu Aug 01 21:32:44 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:46 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:48 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:50 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:52 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:53 IST 2019] Task 1: task executed! [Thu Aug 01 21:32:54 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:56 IST 2019] Task 2: task executed! [Thu Aug 01 21:32:58 IST 2019] Task 2: task executed! [Thu Aug 01 21:33:00 IST 2019] Task 2: task executed!