Java Timer TimerTask несколько потоков

Я использую Timer и TimerTask для длительного опроса новых сообщений для приложения чата. Я хотел бы рассмотреть две «немного» разные возможности :

. 1:Таймер объявлен как локальная переменная

public List<MessageBean> getLastMessages(...) {
    [...]
    Timer timer = new Timer(true); //**Timer declared as local variable**
    while (someCondiction) {
        MessagesTimerTask returnMessagesTask = new MessagesTimerTask([...]);
        timer.schedule(returnMessagesTask, 6000);
        synchronized (listMessageBean) {
            listMessageBean.wait();
            //notify is called in the MessagesTimerTask which extends TimerTask
        }
    }
}

*Проблема:Каждый раз, когда я вызываю метод, я вижу, что создается новый поток, [Timer -1], [Timer -2] и т. д. И в окне отладки Eclipse все они, кажется, работают даже после getLastMessages (...)завершает работу и возвращает значение клиенту. Это может вызвать огромную проблему, если таймеры фактически используют потоки, и после нескольких транзакций сервер в конечном итоге потребляет все ресурсы компьютера.

2:Таймер объявлен как локальное поле

private final Timer timer = new Timer(true); //**Timer declared as local field**

public List<MessageBean> getLastMessages(...) {
    [...]
    while (someCondiction) {
        MessagesTimerTask returnMessagesTask = new MessagesTimerTask([...]);
        timer.schedule(returnMessagesTask, 6000);
        synchronized (listMessageBean) {
            listMessageBean.wait();
            //notify is called in the MessagesTimerTask which extends TimerTask
        }
    }
}

*Проблема:каждый раз, когда я вызываю метод, используется один и тот же поток [Thread -1], но я не уверен, что если я сделаю два последовательных вызова, последний отменит/переопределит первый (, класс @Autowired by весна )?

Какие-либо предложения ? Спасибо.

8
задан Majid Laissi 18 August 2012 в 03:40
поделиться