2013-02-20 32 views
0

我正在研究Java EE Web應用程序。 我使用@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中收到特定請求時。顯然,我可以單獨調用MyBatch線程,但我想知道有一些最佳實踐來執行此操作。

回答

0

有幾個選項:創建一個普通的線程池(多線程),並在每次他們來執行程序中的隊列只是把任務

如果您需要更細粒度的控制,你可以分享。像servlet和您擁有的一個線程之間的併發隊列。讓此線程從隊列中讀取,當隊列爲空時,它將自動阻塞。

然後你的servlet可以把工作放在這個隊列上,如果這個線程在碰到一個項目時會被自動喚醒。

您可能想查看「生產者 - 消費者」模式。有很多這方面的文獻。