Java线程池

线程池:

作用:

1、利用线程池管理并复用线程、控制最大并发数等。(减少频繁创建和销毁线程带来的性能开销)

2、实现任务线程队列缓存策略和拒绝机制(拒绝机制用于拒绝一次性过多的线程,导致系统资源不足,引起其他服务也崩溃)

3、实现某些与时间相关的功能,如定时执行、周期执行(有一些时间控制的线程池)

4、隔离线程环境。(为不同服务开启独立配置的线程池,可以防止服务速度不同带来的影响)

优点:

1、降低资源消耗

2、提高响应速度

3、提高线程的可管理性


常用参数分析:

1、corePoolSIze:常驻核心线程数,如果为0,没有线程请求时会销毁线程池里的所有线程,如果大于0,则没有线程请求时,里面的核心线程也不会被销毁。这个数目要控制好,过大会浪费资源,过小会导致频繁创建销毁线程带来性能下降

2、maximumPoolSize:标识线程池支持的最大线程数。如果跟核心线程一致,则线程池为固定线程数的线程池

3、keepAliveTime:标识线程池的线程空闲时间,大于核心线程数的空闲线程在超过keepAliveTime后,会被销毁,直至剩下常驻核心线程数,避免浪费内存和句柄资源; 当ThreadPoolExecutor 的 allowCoreThreadTimeOut为true时,核心线程也能被回收。

4、TimeUnit:表示时间单位,keepAliveTime时间单位通常是:TimeUnit.SECONDS。

5、workQueue:表示缓存队列,请求数大于corePoolSize时,线程进入缓存队列。

6、threadFactory:表示线程工厂。用来生成一组相同任务的线程。线程池的命名是通过给这个factory增加组名前缀来实现的。

7、handler:表示执行拒绝策略的对象。当workQueue任务缓存队列达到上限后,而且活动线程数大于maximumPoolSize时,线程池会通过拒绝策略处理请求。友好的拒绝策略有以下三种:

  (1)保存到数据库进行削峰填谷。在空闲时间再提取出来

  (2)转向某个提示页面

  (3)打印日志


Executor框架

两级调度模型:

  因为Java线程和操作系统线程是一对一映射的。因此在Java线程启动的时候会创建一个本地操作系统线程,终止时,操作系统就会回收这个线程。在上层,多线程程序常常把应用分解成若干个任务,然后使用用户级的调度器(Executor框架)将这些任务映射为固定数量的线程;在下层,操作系统内核将这些线程映射到硬件处理器上。

  它是一个接口,将任务提交和执行分离

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值