Từ các bài đọc của tôi, có vẻ như ScheduledExecutorService là cách đúng để bắt đầu và dừng bộ hẹn giờ trong Java.sử dụng ScheduledExecutorService để bắt đầu và dừng hẹn giờ
Tôi cần chuyển một số mã bắt đầu và dừng hẹn giờ. Đây không phải là một bộ đếm thời gian định kỳ. Mã này, dừng bộ hẹn giờ trước khi bắt đầu. Vì vậy, hiệu quả mỗi bắt đầu thực sự là một khởi động lại(). Tôi đang tìm đúng cách để làm điều này bằng cách sử dụng ScheduledExecutorService. Đây là những gì tôi nghĩ ra. Looking for ý kiến và cái nhìn sâu sắc vào những thứ tôi đang thiếu:
ScheduledExecutorService _Timer = Executors.newScheduledThreadPool(1);
ScheduledFuture<?> _TimerFuture = null;
private boolean startTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, do not interrupt it.
_TimerFuture.cancel(false);
}
_TimerFuture = _Timer.schedule(new TimerPopTask(),
TIMER_IN_SECONDS,
TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
private boolean stopTimer() {
try {
if (_TimerFuture != null) {
//cancel execution of the future task (TimerPopTask())
//If task is already running, interrupt it here.
_TimerFuture.cancel(true);
}
return true;
} catch (Exception e) {
return false;
}
}
private class TimerPopTask implements Runnable {
public void run() {
TimerPopped();
}
}
public void TimerPopped() {
//Do Something
}
tia, rúp
Mã như được viết sẽ không biên dịch: _batchTimer trong startTimer() không được khai báo ở bất kỳ đâu. Sẽ rất hữu ích nếu bạn có thể tìm hiểu chi tiết hơn về các hành vi mong đợi: giá trị trả về từ startTimer và stopTimer là gì? Tại sao bạn muốn start/stopTimer có khả năng chặn cuộc gọi? – Sbodd
@Sbodd, khi tôi bắt đầu hẹn giờ, nếu đã có bộ hẹn giờ chạy, tôi muốn dừng lại, để tôi không có hai đồng hồ bấm giờ cùng lúc. Tôi nghĩ rằng thay vì get() ở đó, tôi chỉ cần gọi hủy() trong trường hợp tương lai. – rouble