【Java学习笔记】ThreadPoolExecutor 基本概念入门

一、资源

 1、 一篇线程池的入门级别的demo

  http://www.cublog.cn/u2/70285/showart_1936084.html

2、挺详细的,用的是一样的demo

http://blog.csdn.net/waterbig/article/details/4794244

二、分析

   看了一些线程和线程池的资料,自己动手看看

   前期:

  整个代码就改了两个地方

    1、为了观察方便

  // 便于观察,等待一段时间
System.out.println("thread %s sleep "+Thread.currentThread().getName());
Thread.sleep(produceTaskSleepTime);

   2、这条比较有用,对Queue的操作和策略了解很有用

 // 处理一个任务,这里的处理方式太简单了,仅仅是一个打印语句

System.out.println(
"start .." + threadPoolTaskData+"@"+Thread.currentThread().getName());

 运行:

     基本的一些概念,核心,最大,策略,并行

     当前策略: ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 3,

                   TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3),

                    new ThreadPoolExecutor.AbortPolicy());

       参数:core:2  max:4   workQueue: ArrayBlockingQueue 有界队列,大小为3   策略:抛异常

    运行结果:

          

  这里看出:1、2->新建线程,3、4、5入队列,6,7->新建线程,按照策略,8,9,10被拒绝,报错,之后,从队列取出任务,用空闲的线程执行3,4,5.

      

    根据策略的说明,若是 ThreadPoolExecutor.DiscardOldestPolicy,应该是3,4,5被抛弃,而执行8,9,10.运行证实。

    

   

原文地址:https://www.cnblogs.com/hundan/p/2166562.html