在同等數量級的操作下,使用線程池的效率要遠遠高于單線程,
java線程池介紹與使用
。線程池可以降低創建線程帶來的開銷。而線程池中的線程結束后進行的是回收操作而不真的將線程銷毀。而在這個過程過,線程池帶來的內存消耗肯定會大于單線程。在使用線程池的時候要慎重這個問題。下面進行兩個方法,分別來測試下。import java.util.LinkedList;import java.util.List;import java.util.Random;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class ThreadpoolDemo1 { static void useThreadPool(int count) { //定義存儲集合 final List<integer>list = new LinkedList<integer>(); long startTime = System.currentTimeMillis(); ThreadPoolExecutor tpe = new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<runnable>(count) ); //產生隨機數 final Random random = new Random(); for (int i=0; i < count; i++) { tpe.execute(new Runnable() { @Override public void run() { list.add(random.nextInt()); } }); } tpe.shutdown(); try { tpe.awaitTermination(1, TimeUnit.DAYS); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(System.currentTimeMillis() - startTime); System.out.println(list.size()); } www.2cto.com static void useOneThread(int count){ final List<integer>list = new LinkedList<integer>(); long startTime = System.currentTimeMillis(); //產生隨機數 final Random random = new Random(); for (int i=0; i<count; -="" auto-generated="" block="" catch="" interruptedexception="" pre="" public="" static="" thread="" todo="" try="" void=""></p><p> 在count參數為同值的時候,使用線程池會比單獨創建線程的速度要快好幾倍。</p><p> 使用線程池的好處:</p><p> 1)減少了創建和銷毀線程的次數,線程可以被重復利用</p><p> 2)線程池中的線程可以被程序員調節。減少系統內存的消耗。</p><p> 線程池的使用:</p>證明兩者是互不影響的 @Override public void run() { System.out.println(System.currentTimeMillis()); } }, 1000, 2000, TimeUnit.MILLISECONDS); }}ThreadPoolExecutor:
創建ThreadPoolExecutor的參數:
corePoolSize: 池中所保存的線程數,包括空閑線程,
電腦資料
《java線程池介紹與使用》(http://salifelink.com)。maximumPoolSize:池中允許的最大線程數。
keepAliveTime:當線程數大于核心時,此為終止前多余的空閑線程等待新任務的最長時間。
Unit:keepAliveTime 參數的時間單位。
workQueue:執行前用于保持任務的隊列。此隊列僅保持由 execute方法提交的 Runnable任務。
threadFactory:執行程序創建新線程時使用的工廠。
Handler:由于超出線程范圍和隊列容量而使執行被阻塞時所使用的處理程序。