Отключение потоков - PullRequest
       6

Отключение потоков

0 голосов
/ 15 декабря 2010

У меня есть веб-приложение, развернутое на Tomcat.В этом приложении ExecutorService для выполнения некоторого одновременного выполнения задач.В моем приложении также есть несколько методов, которые используют родной поток, как показано ниже, для выполнения одновременных выполнений.

new Thread(new Runnable() { 
 public void run() {  
   //TODO: Perform some CRUD function 
 }
}).start();

Когда для этого метода вызывается форма POST, потоки запускаются и выполняют выполнение функции по желанию.Мой вопрос в том, является ли это хорошим подходом к проектированию, или я должен закрывать поток после каждого сеанса, или я закрываю потоки, когда tomcat выключается, скажем, для обслуживания.Может кто-нибудь указать мне правильное направление, пожалуйста.

Ответы [ 3 ]

1 голос
/ 15 декабря 2010

Должен ли я закрывать поток после каждого сеанса, или я должен закрывать потоки, когда tomcat выключается, например, для обслуживания

Я не совсем понял эту часть, но создание случайного числа новых потоков - плохая идея, во-первых, это дорого, во-вторых, невозможно создать сколь угодно большое количество потоков, рано или поздно вы столкнетесь с исключения из памяти. Лучшая работа с пулом потоков.

0 голосов
/ 15 декабря 2010

У этого подхода есть две проблемы:

  1. Создание новой темы не дешево. Совместное использование пула потоков между клиентскими подключениями - лучший подход
  2. Возможно, система накладывает ограничение на число одновременных потоков, которые может создать JVM. По достижении этого лимита новые клиентские подключения будут отклонены.

Вы можете решить эти проблемы, используя средства, предоставляемые пакетом java.util.concurrent. Подробнее см. в этом руководстве .

0 голосов
/ 15 декабря 2010

Создание и запуск новых потоков - довольно дорогая операция.Если вы беспокоитесь о производительности, используйте метод Executors.newCachedThreadPool.
Кроме того, если вам не нужно беспокоиться об исчерпании ограничения потока в случае использования некоторого Executors.newFixedThreadPool.Обратите внимание, что использование этого типа исполнителя может вызвать задержки для пользователей, если количество пользователей превысит количество потоков в пуле.Однако, если операция, выполняемая задачей, является кратковременной, пользователи вряд ли заметят задержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...