How to modify a java timer interval after scheduli

2019-07-18 04:03发布

问题:

This question already has an answer here:

  • Pausing/stopping and starting/resuming Java TimerTask continuously? 7 answers

I have a service which has one Timer. I call timer.scheduleAtFixedRate() in the onStart() callback method. But I have to alter the timer interval depending on the value of a variable. I found no function for timer to alter its interval. So I thought to cancel the timer and re-schedule when that condition is met. But I am checking the condition with in the timerTask itself. So when I tried to cancel the timer in the TimerTask, it throws IllegalStateException. Can anybody give me some solution?

回答1:

A timer can only be scheduled once. If IllegalStateException isn't happening when you call cancel(), but when you try to reschedule the timer, just reinstantiate the timer and then schedule it. Otherwise, I'm not sure.



回答2:

Netiher Timer.cancel() nor TimerTask.cancel() throws IllegalStateException. That is thrown when you try to schedule a task on a cancelled Timer.

Solution: don't cancel the Timer; cancel the TimerTask.