java线程池学习(二)

new Thread 弊端:

   1、每次new Thread 新建对象,性能差

    2、线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多的系统资源导致死机或者OOM

    3、缺少更多的功能,如更多执行、线程中断等

 

线程池--ThreadPoolExecutor 

   corePoolSize: 核心线程数量

   maxinumPool: 线程最大线程数

   workqueue: 阻塞队列,存储等待执行的任务,很重要,对线程池产生重大的影响 。

  keepaliveTime: 线程没有任务执行时,最多保持多久时间终止 。

 unit: keepalivetime 的时间单位

  threadFactory: 线程工厂,用来创建线程池使用的 。

  rejectHeader: 当拒绝处理任务时的策略

 线程池的几个状态: 

   1、 running : 接受新提交的任务,也能处理阻塞队列中的任务

    2、shutdown: 不能接受新提交的任务,但是可以处理线程池中正在等待的任务

   3、stop: 不能接受新提交的任务,也不能处理阻塞队列的任务

  4、tidying : 如果所有的任务都终止了,有效线程数为0 ,线程池会进入到该状态 

 execuor: 提交任务,交给线程池执行 

 submit : 提交任务,能够返回执行结果

 shutdown: 关闭线程池,等待所有的任务执行完

 shotdownnow: 关闭线程池,不等待所有的任务执行完

 gettaskcount : 获取已经执行和还没有执行的任务

 getcompletedTaskCount(): 获取已经执行完成的线程数量

 getpoolsize: 线程池当前的线程数量

 getactivecount: 当前线程池中正在执行的线程数量

Executors.newCacheThreadPool : 创建一个可缓存的线程池,可以动态的扩展内存大小,并将使用完的内存资源进行回收 

Executors.newFixedPool : 创建一个定长的线程池 ,可控制线程的最大并发数,超出的线程在队列中等待

Executors.newScheduledThreadpool: 创建的已是一个订场的线程池,可以做到定时和周期性的执行任务。

Executors.newSingleThreadExecutor: 单线程的线程池,所有的任务只能按照固定的顺序去执行

 

线程池的合理配置:

   1、 CPU密集型任务,需要尽量压榨CPU的资源,参考值可以设置为NCPU+1 

   2、IO密集型的任务,参考值可以设置为2*NCPU

 

posted @ 2019-09-12 02:50  青紫天涯  阅读(177)  评论(0编辑  收藏  举报