Итак, я использую сервер Java, и в одном классе у меня есть статический таймер.Затем у меня есть другой класс, который имеет множество экземпляров, создаваемых и уничтожаемых в течение всей жизни программы, каждый со своим собственным TimerTask (используя статический Timer).Когда экземпляр уничтожается, он вызывает метод 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();
}