簡體   English   中英

通過Java中的ExecutorService進行並發

[英]Concurrency through ExecutorService in Java

我正在使用Java 1.6的以下並發功能離線執行一些任務。 通過注冊創建用戶時,我需要執行一些內部日志記錄任務,並且我不想阻止該用戶,因此我一直在使用以下代碼

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

在這里,我有一個內部類myTask,它實現了Runnable&in Run方法,並且正在進行離線活動(因此將其作為非阻塞調用)。

現在,一旦用戶登錄到網站,就可以單擊某些操作(網頁上的按鈕),然后單擊它們,我需要進行類似的脫機活動,並且我也不想將該呼叫作為阻止呼叫。 我在此頁面上有4個動作,我需要在這些動作上執行離線任務。

將上面類似的代碼與4個不同的內部類一起使用並在其中執行離線活動是否可以? 如果沒有,那還有什么選擇?

謝謝!

如果您不希望出現高水平的並發請求,則可以使用執行器。 在這種情況下,請使用線程池

如果您的應用程序是並發性很高的應用程序,那么您應該保證動作的處理(即使在jvm崩潰的情況下),並且希望動作是事務性的,那么消息傳遞(JMS)可能是解決方案。

我已經成功地在Web應用程序中成功地將Executors與池一起使用了。 但是,不建議在Web應用程序中創建線程,並且不建議在EJB中創建線程,因為線程不是由容器管理的。

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

您還可以閱讀這篇不錯的文章: Java並發

除了線程池之外,您還應該使用線程安全隊列來允許比可用線程更多的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM