Как создать поток, который работает все время, мое приложение работает

Я не верю так. Можно использовать, 'содержит' на поле, но оно только генерирует LIKE запрос. Если бы Вы хотите использовать полный текст, я рекомендовал бы использовать сохраненный proc, чтобы сделать, запрос тогда пасует назад его к LINQ

5
задан Ittai 10 September 2009 в 10:20
поделиться

5 ответов

Ваш код не запускает новый поток, он запускает цикл в том же потоке, поэтому при развертывании вы получаете ошибку тайм-аута.

Чтобы запустить поток, вы должны вызвать метод запуска, а не метод запуска.

public void contextInitialized(ServletContextEvent sce) {   
//Some init code not relevant, omitted for clarity
  BidPushThread t= new BidPushThread();
  t.setServletContext(sce.getServletContext());
  t.start();// run();
}
3
ответ дан 13 December 2019 в 05:39
поделиться

setDaemon

СВОДКА:

  • Помечает этот поток либо как поток демона, либо как поток пользователя. В Виртуальная машина Java завершает работу, когда только запущенные потоки - все это демон потоки.
  • Этот метод должен быть вызван до запуска потока.
  • Этот метод сначала вызывает метод checkAccess этого потока
    без аргументов. Это может привести к выброс SecurityException (в
    текущий поток).

Threads

РЕЗЮМЕ: Во многих случаях то, что мы действительно хочу создать фоновые потоки которые выполняют простые периодические задачи в заявление. Метод setDaemon () может использоваться для обозначения темы как поток демона, который следует убить и отброшены, когда нет других потоки приложений остаются. Как обычно, интерпретатор Java продолжает работать пока все потоки не будут завершены. Но когда потоки демона - единственные потоки еще живы, интерпретатор завершится.

5
ответ дан 13 December 2019 в 05:39
поделиться

Это было бы очень плохой идеей. Вы вызовете 100% загрузку процессора без уважительной причины.

Правильным решением, вероятно, является блокировка потока, когда очередь пуста. Это тривиально реализуется с помощью BlockingQueue .

3
ответ дан 13 December 2019 в 05:39
поделиться
Can't I have a thread which is always running? When the app is removed, 
that thread is stopped by the corresponding event in my ServletContextListener.

«Этот поток остановлен»? Как? В вашем цикле while (true) {...} нет условия завершения. Как вы это останавливаете? Вы используете метод Thread.stop ()? Это небезопасно и устарело еще в Java 1.1

. Если вы используете setDaemon (true), поток останется активным после того, как вы остановите веб-приложение с помощью инструментов управления сервером приложений. Затем, если вы перезапустите веб-приложение, вы получите еще один поток. Даже если вы попытаетесь отменить развертывание веб-приложения, поток будет продолжать работать и предотвратит сборку мусора для всего веб-приложения. Затем повторное развертывание следующей версии даст вам дополнительную копию всего, что находится в памяти.

Если вы предоставите условие выхода для цикла (например, InterruptedException или изменчивое логическое значение «stopNow»), вы можете избежать этой проблемы.

1
ответ дан 13 December 2019 в 05:39
поделиться

Взгляните на метод java.langThread.setDaemon (), может это то, что вам нужно

0
ответ дан 13 December 2019 в 05:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: