2010-07-21 102 views
1

使用線程池的池大小僅爲1基本上只是一遍又一遍地重複使用一個線程以用於應用程序中的不同用途是否合理?而不是做新的線程(Runnable())等,然後讓垃圾收集器處理線程的刪除,我認爲只使用一個線程用於不需要一起運行的不同作業會更高效。池大小爲1的Java線程池1

這是我目前正在做的事情來定義1池池線程池。

private static int poolSize = 1; 
private static int maxPoolSize = 1; 
private static long keepAliveTime= 10; 
private static final ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<Runnable>(100); 
private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(poolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, queue); 
+0

而且您知道使用不同java庫中併發線程的所有用法嗎?單獨保留默認值,這是有原因的。 – Oded 2010-07-21 08:04:07

回答

3

單線程線程池沒有問題,只要它符合應用程序的功能。例如,在我工作的應用程序中,我們有許多服務,我們需要確保數據嚴格按照到達順序進行處理。爲此,我們只需在單個線程執行程序上執行任務。

另外使用執行程序意味着如果需要,將來可以很容易地調整線程池參數。

+0

感謝您的意見!我對我現在所做的事充滿信心。 感謝大家的評論! – 2010-07-23 23:58:12

1

隨着new Thread(Runnable)你可以同時執行N個線程。這可能是一個優點,但它也可能帶來同步問題。

重複使用一個線程會失去並行執行任務的能力,但您不會遇到同步/併發問題。

+0

那麼在程序進行API調用很多,並解析JSON,但我不需要做並行調用(即一次多個API調用,這就是爲什麼我訴諸這種技術)。 – 2010-07-21 08:30:38

1

以這種方式定義單線程池與現代編碼標準完美兼容。它有唯一的缺點,就是不讓你並行化代碼的任何片段。但是,我想這就是你想要的。

1

使用ThreadPoolExecutor的優勢之一就是一旦創建線程,它就會被重用,因爲每次使用新線程時都會創建新線程。

1

您是否嘗試過沒有線程?線程沒有效率,除非真正需要,你需要並行處理大量I/O特定的東西。如果你正在尋找的是一個簡單的內部消息隊列,那麼它很好。