ThreadPoolExecutor参数讲解

1. 线程池可以节省创建多个线程带来的开销问题。

2. 线程池的参数如下:
  
public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue) {
        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
             Executors.defaultThreadFactory(), defaultHandler);
    }


    说明:
   线程池按以下行为执行任务
    1)当线程数小于核心线程数时,创建线程。
    2)当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。
    3)当线程数大于等于核心线程数,且任务队列已满
       i)若线程数小于最大线程数,创建线程
       ii)若线程数等于最大线程数,抛出异常,拒绝任务


3. 例子
  
   public static void main(String args[]) throws InterruptedException {
		
		ThreadPoolExecutor executor;
		executor = new ThreadPoolExecutor(3, 10, 5, TimeUnit.SECONDS,
				new LinkedBlockingQueue<Runnable>(10));
		
		for(int i=0;i<20;i++){
			Runnable r=new Runnable(){
				@Override
				public void run() {
					System.out.println("thread run...");
					try {
						Thread.sleep(10000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					
				}
				
			};
			executor.execute(r);
		}
	}

   


   结果说明:
  1)如果队列不指定大小,默认大小无限大,这样队列不会满,每次只有三个coreThread来
      跑(大于核心线程数,但队列不满,任务放入队列中);
   2)如果指定队列大小为10,则最大的10个工作线程来跑;
   3)如果指定队列大小为5,则队列满了,后面的线程被reject掉了。

你可能感兴趣的:(java)