2012-09-11 71 views
0

Java - webapp通過Executors類執行線程的優勢如下代碼,然後以固定的池大小運行。Java Webapp執行程序類

private ExecutorService threadRunner; 
threadRunner = Executors.newFixedThreadPool(2); 

threadRunner.submit(activeQueueRunner); 
threadRunner.submit(standbyQueueRunner); 

回答

2

線程包含很多支持結構,這些結構的創建很昂貴。執行程序是一次創建的線程池,但被包含所需的支持代碼以在多個任務中重用。

換句話說,如果您只將兩個項目提交給大小爲2的新的固定線程池,則沒有優勢。當您將第三項提交到threadRunner池時,優勢在於它會綁定到已完成任務的線程(activeQueueRunnerstandbyQueueRunner)之一,並使用該線程執行其run(...)塊。

如果您將提交的任務編寫爲永不完成,那麼他們基本上不會將線程釋放回池中。因此,在使用Executor類型池時,最好做大量快速輕量級任務,並讓池分攤在整個程序運行過程中創建/銷燬線程的昂貴成本。