Tóm Tắt
1. Timer và TimerTask trong Java
Timer
và TimerTask
là hai class trong package java.util
được sử dụng để lên lịch cho một công việc và chạy nó trong background với 1 thread.
TimerTask là việc làm được thực thi còn Timer là lịch trình thực thi .
2. Code ví dụ Timer, TimerTask
Tạo Project Java:
Cấu trúc Project
Tạo Task bằng cách thừa kế TimerTask
:
Task của mình chỉ đơn giản là in ra màn hình “Run my Task” + thời gian hiện tại
package stackjava.com.timertaskexp; import java.util.Date; import java.util.TimerTask; public class MyTask extends TimerTask { @Override public void run() { System.out.println("Run my Task " + new Date()); } }
Tiếp theo ta sử dụng Timer
để lên lịch cho task vừa tạo
2.1 Chạy task 1 lần với Timer:
package stackjava.com.timertaskexp; import java.util.Calendar; import java.util.Date; import java.util.Timer; public class DemoTaskOnce { public static void main(String[] args) { MyTask myTask = new MyTask(); Timer timer = new Timer(); System.out.println("Currnet time: " + new Date()); timer.schedule(myTask, 5000); // Calendar calendar = Calendar.getInstance(); // calendar.add(Calendar.SECOND, 5); // Date dateSchedule = calendar.getTime(); // timer.schedule(myTask, dateSchedule); } }
Tham số của method schedule()
gồm task được thực thi và thời gian delay (sau bao lâu thì chạy) ở đây mình để là sau 5s thì thực thi task:
Kết quả khi chạy class trên :
Tương tự, thay vì truyền vào thời gian delay, ta có thể truyền tham số kiểu Date để chỉ định khi nào thì chạy:
Xem thêm: Cách Lập Biz Zing Me Uy Tín
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, 5); Date dateSchedule = calendar.getTime(); timer.schedule(myTask, dateSchedule);
2.2 Chạy task lặp lại nhiều lần với Timer:
package stackjava.com.timertaskexp; import java.util.Timer; public class DemoTaskRepeat { public static void main(String[] args) { MyTask myTask = new MyTask(); Timer timer = new Timer(); timer.schedule(myTask, 0, 2000); } }
Trong method schedule()
ngoài thời gian delay ta có thể truyền thêm tham số để xác định sau bao lâu thì task được lặp lại.
Trong ví dụ này của mình task chạy ngay lập tức, và cứ sau 2 s thì lặp lại 1 lần :
Demo :
2.3 Chạy task chạy hàng ngày với Timer:
Ví dụ mình muốn cứ vào 5 h30 sáng hàng ngày thì task được triển khai một lần :
- Tạo dateSchedule với thời gian là 5:30:00
- Tạo period với giá trị là số miliseconds trong 24h.
package stackjava.com.timertaskexp; import java.util.Calendar; import java.util.Date; import java.util.Timer; public class DemoTaskDaily { public static void main(String[] args) { MyTask myTask = new MyTask(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 5); calendar.set(Calendar.MINUTE, 30); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date dateSchedule = calendar.getTime(); long period = 24 * 60 * 60 * 1000; Timer timer = new Timer(); timer.schedule(myTask, dateSchedule, period); } }
Tương tự những bạn hoàn toàn có thể tạo task chạy hàng tuần, hàng tháng …
Okay, Done !
Download code ví dụ trên tại đây.
References :
https://docs.oracle.com/…/Timer.html
Source: https://final-blade.com
Category : Kiến thức Internet