2017-06-21 71 views
3

我有一個多線程的應用程序,所以我實現ExecutorService 5線程池大小多線程在WebSphere

public class SimpleThreadPool {  
    public static void main(String[] args) { 
     ExecutorService executor = Executors.newFixedThreadPool(5); 
     for (int i = 0; i < 10; i++) { 
      Runnable worker = new WorkerThread("" + i); 
      executor.execute(worker); 
     } 
     executor.shutdown(); 
     while (!executor.isTerminated()) { 
     } 
     System.out.println("Finished all threads"); 
    } 
} 

該應用程序將在WebSphere Web服務器與設置包含線程池配置中部署:應用程序服務器>> Thread Pools>默認情況下,最大大小設置爲60.

我的問題是,採用哪種池大小配置,Websphere中的配置是否覆蓋代碼中的配置(5個線程)?

+0

你的問題對我沒有意義。你能否澄清更多? –

+0

如果您發現我的答案有幫助 - 您能否考慮接受它? – GhostCat

+1

和無關:這樣的「空」循環:'while(!executor.isTerminated()){}'是** ** **。你在這裏等着「熱」這意味着CPU將100%旋轉,等待條件成真 - 它會在幾秒鐘內對該方法進行數十億次的調用。你真的想把一些「睡眠(xxx)」調用放入循環體中! – GhostCat

回答

2

這兩件事情沒有任何關係。

服務器設置是關於服務器使用的線程。請參閱documentation

使用此頁面配置應用程序服務器使用的一組線程。請求通過任何HTTP傳輸發送到服務器。線程池使服務器的組件能夠重用線程,以消除在運行時創建新線程的需要。創建新線程會花費時間和資源。

現在,您的應用程序代碼創建自己的獨立線程池。

其中有沒有與該系統池。

當然,您的應用程序可能會將「任務」發送到該系統線程池;以這種方式使用它。

+0

Thx爲您的答案。 – Bill

2

不,這些將是不同的線程池。

具有60個線程的人需要通過jndi服務的名稱來禁用。 Websphere線程池有點不同。例如,它支持JTA(分佈式)事務。您只能在這些特殊線程池內使用JTA事務。

本地的將有5個線程,不受任何方式影響Websphere。您可以通過提交大量任務來檢查線程數量,然後通過jstackkill -3命令打印線程堆棧。

+0

@GhostCat謝謝,你也+1 =) –

+0

謝謝先生:) @Andrey Cheboksarov – Bill