Hãy thử theo cách này ->
Trước tiên, tạo một TimeTask lớp chạy nhiệm vụ của bạn, nó trông giống như:
public class CustomTask extends TimerTask {
public CustomTask(){
//Constructor
}
public void run() {
try {
// Your task process
} catch (Exception ex) {
System.out.println("error running thread " + ex.getMessage());
}
}
}
sau đó trong lớp chính, bạn khởi tạo tác vụ và chạy nó định kỳ bắt đầu trước một ngày được chỉ định:
public void runTask() {
Calendar calendar = Calendar.getInstance();
calendar.set(
Calendar.DAY_OF_WEEK,
Calendar.MONDAY
);
calendar.set(Calendar.HOUR_OF_DAY, 15);
calendar.set(Calendar.MINUTE, 40);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Timer time = new Timer(); // Instantiate Timer Object
// Start running the task on Monday at 15:40:00, period is set to 8 hours
// if you want to run the task immediately, set the 2nd parameter to 0
time.schedule(new CustomTask(), calendar.getTime(), TimeUnit.HOURS.toMillis(8));
}
TimeUnitáp dụng cho cảinitialDelayvàperiod. Chạy mỗi 24 giờ sẽ kết thúc được ném ra khi đá DST, nhưng mộtTimeUnitsốDAYSkhông cho phép bạn chỉ định một hạt mịninitialDelay. (Tôi nghĩ rằng việc triển khai Nội bộ theo Lịch trình ExecutorService chuyển đổiDAYSthành nano giây dù thế nào đi nữa).