簡體   English   中英

執行器服務缺少一些任務

[英]Executor service missing few tasks

我有大約900個任務。 我將線程池數設置為50。我正在運行一個循環,並將每個任務提交給executorService。

一旦控制出來,我就打電話給關機如下

for (Entry<String, String> CurrentJob : Tasks.entrySet()) {
            m_service.submit(new MyTask(CurrentJob.getValue(), CurrentJob.getKey()));
        }
          m_service.shutdown();

每項任務平均需要大約1秒。現在我有兩個問題

a)幾乎所有人都在做這項工作(850),但損失了大約50。 我已將調試器置於callable,但對於那些特定任務甚至沒有控制權。 雖然如果我把它們單獨放置它們就可以了 我缺少什么樣的Executor服務邏輯?

b)我已經在這個代碼周圍放了一個計時器,根據javaDoc Shutdown應該等到所有線程完成但我的計時器總是說時間為零。

ExecutorService不會等待先前提交的任務完成。 來自JavaDocs:

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html#shutdown--

此方法不會等待先前提交的任務完成執行。 使用awaitTermination可以做到這一點。

所以可能發生的事情是ExecutorService關閉,繼續完成排隊工作,但JVM退出是因為你的主線程終止(只留下守護進程線程,這不會讓JVM保持活動狀態)? 也許那就是問題?

要通過執行程序服務處理被拒絕的任務,ThreadPoolExecutor會提供RejectedHandler類。

示例 ThreadPoolExecutor threadP =(ThreadPoolExecutor)Executors.newFixedThreadPool(3); threadP.setRejectedExecutionHandler(new RejectedHandler()); //添加任務

threadP.shutdown()

暫無
暫無

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

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