2013-02-20 3 views
0

Я работаю над веб-приложением Java EE. Я разработал пакет информации с использованием @WebListener аннотации:Запланированное задание Java EE и принудительная задача

@WebListener 
public class BatchServlet implements ServletContextListener { 

    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
     context = sce.getServletContext(); 
     schedulerEngine = Executors.newSingleThreadScheduledExecutor(); 
     schedulerEngine.scheduleAtFixedRate(new MyThread(), 0, 300, TimeUnit.SECONDS); 
    } 


public class MyThread implements Runnable { 
     @Override 
     public void run() { 
      ...... //my business logic 
     } 

и он работает правильно.

Но для моей цели мне нужно принудительно выполнить пакет MyThread() по требованию, например, когда я получил конкретный запрос в Servlet. Obviosly Я могу назвать поток MyBatch отдельно, но мне было интересно, что для выполнения этой операции есть несколько рекомендаций.

ответ

0

Есть несколько вариантов: создать регулярный пул потоков (с несколькими потоками) и просто поставить задачи по очереди исполнителю всякий раз, когда они приходят в

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

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

Возможно, вы захотите посмотреть шаблон «производитель-потребитель». Об этом много литературы.

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