2012-01-03 3 views
0

Я использую функцию параллелизма Java 1.6 для выполнения какой-либо задачи в автономном режиме. Когда пользователь будет создан путем регистрации, мне нужно выполнить некоторые задачи протоколирования Inhouse & Я не хочу, чтобы заблокировать пользователя, поэтому я использую ниже кодПараллелизм через ExecutorService в Java

java.util.concurrent.ExecutorService myservice = Executors.newSingleThreadExecutor(); 
    myservice.execute(new myTask(user)); 

Здесь я имеющий внутренний класс myTask, который реализует Runnable & в методе «Выполнить», я выполняю автономную работу (тем самым делая ее как неблокирующий вызов).

Теперь, как только пользователь входит в систему на веб-сайте, есть определенные действия (кнопки на веб-страницах), на которые мне нужно делать подобные действия в автономном режиме. & Я не хочу, чтобы вызов вызывался как блокирующий вызов. У меня есть 4 действия на этой странице, на которых мне нужно выполнять автономные задачи.

Можно ли использовать аналогичный выше код с 4 различными внутренними классами & выполнять автономную деятельность внутри них ?? Если нет, то какая альтернатива?

Спасибо!

ответ

0

Вы можете использовать Исполнителей, если вы не ожидаете высокого уровня одновременных запросов. В этом случае используйте Thread pool.

Если вы являетесь высококонкурентным приложением, и вы должны гарантировать обработку действия (даже в случае сбоя jvm), и вы хотите, чтобы действия были транзакционными, тогда обмен сообщениями (JMS) может быть решением.

Я успешно использовал Исполнителей с пулами ранее в веб-приложении. Однако не рекомендуется создавать потоки в веб-приложении и не разрешено в EJB, так как потоки не управляются контейнером.

Пример

static final int POOL_SIZE=10; 
ExecutorService pool = Executors.newFixedThreadPool(POOL_SIZE); 

Вы также можете прочитать эту замечательную статью: Java Concurrency

+0

Я использую Struts2 & in struts action, у меня есть эта исполнительная нить. Вы могли бы предоставить примерную строку о том, как реализовать пул потоков? Нужно ли настраивать размер пула потоков? Если да, то где? Я использую сервер tomcat 6. – Mike

+0

@ Майк добавил образец кода. вам нужно убедиться, что вы создаете пул протектора только один раз и завершаете работу, прежде чем веб-приложение будет остановлено. –

+0

Я все еще новичок в использовании этих API. Я вижу, что вы вызвали newFixedThreadPool. Но тогда как он будет называть myTask, который является моим внутренним классом, который реализует интерфейс Runnable? Мне нужно вызвать pool.execute (новый myTask (пользователь)); Кроме того, что произойдет, если более 10 пользователей попытаются получить доступ к веб-сайту? – Mike

0

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

Смежные вопросы