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

 

转载于:https://www.cnblogs.com/wcgstudy/p/11509804.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值