线程池ThreadPoolExecutor(三)成员变量

三:ThreadPoolExecutor成员变量和方法介绍

1. 成员变量:

      a)corePoolSize核心池大小、maximumPoolSize最大线程数量,它们是用来控制线程的数目,总体流程为1:若小于Core则新建线程执行;2:若大于等于Core,则加入BlockingQueue;3:若BlockingQueue满了之后,若小于Maximum,则新建线程来执行任务,若大于等于Maximum,则执行拒绝策略;

      b)threadFactory线程工厂,它是用来创建线程的地方,Executors中默认的线程工厂会将守护线程属性设置为false,线程的优先级设置为Normal登记;Executors还提供了权限线程工厂privilegedThreadFactory,可以对其的访问权限进行控制;

    c)BlockingQueue workQueue任务队列,用来存放需要等待执行的任务,根据策略不同,Executors中提供了4种阻塞队列,不含容量的同步队列Synchronous队列,它不保存任务,一直创建新的线程执行,直到到maximum,然后执行拒绝策略;LinkedBlockingQueue无界队列,所以可以一直添加直到系统OOM;ArrayBlockingQueue它是有界的;PriorityBlockingQueue根据优先级的大小进行执行任务,Array和Linked则根据FIFO来执行任务;

   d)keepAliveTime存活时间,对于超过CorePoolSize大小的线程最多存活的时间;

   e)rejectedExecutionHandler拒绝策略,对于超标,不能执行的拒绝策略;

   f)AtomicInteger ctl,它的高3位用来保存线程池状态,低29位用来保存works的数目,The main pool control state,线程池状态,利用CAS来切换状态,分为Running(-1)、Shutdown(0)、              Stop(1)、Tidying(2)、Terminated(3);   

   g)ReentrantLock mainLock,在对works等进行操作时,用来同步;

   h)HashSet works,所有的工作线程,只有当有mainLock的锁时,才可以访问;

   i)boolean allowCoreThreadTimeOut,true的时候,core线程在keepAliveTime后将被释放,false时即使线程空闲也不释放;

还有一些其他变量,待以后再做解析,如 Condition termination、int largestPoolSize、long completedTaskCount等待解析;

你可能感兴趣的:(java线程池)