Итак, я запускаю сервер Java, и в одном классе у меня есть статический таймер. Затем у меня есть еще один класс, в котором много экземпляров создается и уничтожается на протяжении всей жизни программы, каждый со своим собственным TimerTask (с использованием статического таймера). Когда экземпляр уничтожается, он вызывает метод cancel() в TimerTask.
Проблема в том, что я не уверен, что это хороший дизайн, а также я иногда получаю ошибки, когда экземпляр создает и планирует свою TimerTask:
java.lang.IllegalStateException: Timer already cancelled.
Вот некоторый код, чтобы показать, что я имею в виду.
/**
* Starts scheduled tasks using TimerTask
*/
private void initTasks()
{
// room heartbeat thread: start immediately, run once every second
roomHeartbeatTask = new RoomHeartbeatTask(this);
RoomListExtension.roomHeartbeat.schedule(roomHeartbeatTask, 0, 1000);
// add additional tasks here
}
/**
* Cancels all tasks that have been started by this extension
*/
private void cancelTasks()
{
roomHeartbeatTask.cancel();
}