Как лучше всего запускать потоки или загружать общие ресурсы на сервер приложений Java вне вызова сервлета? - PullRequest
1 голос
/ 22 ноября 2010

Абстрактный вопрос

Каков наилучший способ загрузки ресурсов в память, которая будет совместно использоваться сервлетами на сервере приложений Java?

Что я на самом деле делаю

Я хочу создать поток демона, который отслеживает очередь. В эту очередь могут быть добавлены объекты из потоков сервлета. Поток будет ждать до установленного периода времени и проверять очередь, чтобы увидеть, есть ли в нем элементы, если это так, то он обработает их и удалит их. Этот поток должен быть запущен где-то когда-нибудь. Я думал, что сервлет с только реализованным методом init будет работать для этой задачи, или есть ли лучшее место для размещения кода запуска, подобного этому, на сервере приложений? Я подхожу к проблеме все шатко?

Обновления

Я нашел этот вопрос , и принятым ответом было использование LifeCycle Listener. Это переносимый способ выполнения или мой код будет привязан к одному серверу приложений. Немного больше расследования привело меня к поиску нескольких сообщений на досках объявлений, в которых говорилось, что я могу сделать это в реализации ServletContextListener .

1 Ответ

2 голосов
/ 22 ноября 2010

Обычно я запускаю такие рабочие потоки косвенно из сервлета, используя метод, который вы описываете (обычно они существуют внутри какого-то другого объекта, который выполняет извлечение очереди и управляет обработкой).

Для извлечения объектов из потока вам не нужно делать это в зависимости от времени, вы можете сделать так, чтобы ваш поток ожидал () объект очереди и когда объект был помещен в очередь другим потоком, этот поток вызовет notify () в очереди, чтобы освободить отслеживающий «рабочий» поток.

Google 'java worker thread wait notify' для многих примеров.

...