Lớp Timer lên lịch một tác vụ chạy tại một thời điểm cho trước một lần hoặc lặp lại. Nó cũng có thể chạy nền như một daemon thread. Để liên kết Timer với daemon thread, có một constructor với giá trị boolean. Timer lên lịch tác vụ với độ trễ cố định (fixed delay) cũng như tốc độ cố định (fixed rate). Với độ trễ cố định, nếu bất kỳ thực thi nào bị trễ do System GC, các thực thi khác cũng sẽ bị trễ và mọi thực thi đều bị trễ tương ứng với thực thi trước. Với tốc độ cố định, nếu thực thi nào bị trễ do System GC thì 2-3 thực thi xảy ra liên tiếp để bù đắp tốc độ cố định tương ứng với thời gian bắt đầu thực thi đầu tiên. Lớp Timer cung cấp phương thức cancel() để hủy timer. Khi phương thức này được gọi, Timer bị chấm dứt. Lớp Timer chỉ thực thi tác vụ triển khai TimerTask.
Ví dụ
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); // Thực thi mỗi 10 giây
t.schedule(t2, 1000, 2000); // Thực thi mỗi 2 giây
}
}
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!");
}
}
Kết quả
[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!