線程池(2)Executors.newFixedThreadPool
阿新 • • 發佈:2018-09-07
imu all oid inf err maximum unit col finall
例子:
ExecutorService es = Executors.newFixedThreadPool(5); try { for (int i = 0; i < 20; i++) { Runnable syncRunnable = new Runnable() { @Override public void run() { log.info(Thread.currentThread().getName());try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }; es.execute(syncRunnable); } } finally { es.shutdown(); }
運行結果:
* 10:20:14.630 pool-1-thread-5
10:20:14.630 pool-1-thread-1
10:20:14.632 pool-1-thread-4
10:20:14.630 pool-1-thread-2
10:20:14.630 pool-1-thread-3
10:20:16.635 pool-1-thread-4
10:20:16.635 pool-1-thread-5
10:20:16.635 pool-1-thread-1
10:20:16.636 pool-1-thread-2
10:20:16.637 pool-1-thread-3
10:20:18.637 pool-1-thread-3
10:20:18.638 pool-1-thread-4
10:20:18.641 pool-1-thread-5
10:20:18.641 pool-1-thread-1
10:20:18.642 pool-1-thread-2
10:20:20.638 pool-1-thread-3
10:20:20.639 pool-1-thread-4
10:20:20.641 pool-1-thread-5
10:20:20.642 pool-1-thread-1
10:20:20.642 pool-1-thread-2
調用的ThreadPoolExecutor:
public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); }
corePoolSize=maximumPoolSize=5
keepAliveTime=0
allowCoreThreadTimeout=false(默認)
因此,
- 線程池中的線程數永遠是5,永久存活。
- 對於新任務,當隊列未滿時,插入隊列;當隊列已滿時,默認執行AbortPolicy,即拋出異常。
- 支持線程reuse
線程池(2)Executors.newFixedThreadPool