2016-01-15 93 views
0

我有一個java程序部署在使用Quartz調度器執行的Weblogic服務器中。該程序每10秒執行一次。在java代碼中,我使用ExcutorService創建了兩個線程,最後我調用了service.shutdown()。但是每次石英調度程序運行程序時,都會通過增加池標識(如「pool-109-thread-1」和「pool-109-thread-2」)來創建一個新的線程池,然後pool-110-thread-1「 。和「池110線程2」因此,這池計數增加是否確定或者我需要改變的東西在我的代碼如下 示例代碼:?`爲什麼執行器服務實施的池數增加?

public void post(){ 
ExecutorService service = Executors.newFixedThreadPool(2); 
    for (String filePath : strArray) { 
service.submit(new PostImages(postURL,filePath)); 
} 
service.shutDown(); 
} 

`

+3

你不應該每次初始化'ExecutorService'。 – sidgate

+0

好的,但我的代碼中的舊線程池發生了什麼?爲什麼每次執行post()方法時池數都會增加? service.shutdown()不工作? – Xerxis

+0

Hi Xersis:你什麼時候調用post()方法?將此語句從post()方法中移出。 ExecutorService service = Executors.newFixedThreadPool(2);在其他地方調用shutDown()方法。 –

回答

0

我認爲沒關係,它可能會增加池ID,因爲舊的還在等待垃圾收集器。

+0

嗨,Leo ..爲了測試,我在weblogic環境中重新部署了這場戰爭,令人驚訝的是池ID再次增加了。之前它是'pool-309-thread-1',重新部署後它從'pool-310-thread-1'開始。它還好嗎?還是有嚴重的錯誤?請幫忙 !! – Xerxis

0

每當您撥打Executors.newFixedThreadPool(2)時,都會有一個新的線程池的2個線程被創建。如果運行次數過多,因爲您的操作系統的進程數量會崩潰,這會是一個問題。

您必須將本地變量轉換爲靜態變量,並且只有1個線程池實例,只保留2個線程來執行作業。