package com.bjsxt.height.concurrent018; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class UseThreadPoolExecutor2 implements Runnable{ private static AtomicInteger count = new AtomicInteger(0); @Override public void run() { try { int temp = count.incrementAndGet(); System.out.println("任务" + temp); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) throws Exception{ //System.out.println(Runtime.getRuntime().availableProcessors()); BlockingQueue<Runnable> queue = //new LinkedBlockingQueue<Runnable>(); new ArrayBlockingQueue<Runnable>(15); //有界队列执行过程:20个线程,先执行五个(因为初始化了5个)然后判断队列放不放得下剩下的15个,如果放不下 //15个,就再创建5个线程 (因为Max,之前创建了五个,所以还可以再创建五个所以是10),如果放得下,Max参数无效,每次还是执行 //5个线程。那剩下的线程就只能放到队列里。 ExecutorService executor = new ThreadPoolExecutor( 5, //core 10, //max 120L, //2fenzhong TimeUnit.SECONDS, queue); for(int i = 0 ; i < 20; i++){ executor.execute(new UseThreadPoolExecutor2()); } Thread.sleep(1000); System.out.println("queue size:" + queue.size()); //10 Thread.sleep(2000); } }
线程池——有限无限队列测试
猜你喜欢
转载自barabbas.iteye.com/blog/2419246
今日推荐
周排行