• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我曾溪底杀指玄
博客园    首页    新随笔    联系   管理    订阅  订阅

java线程池及阻塞队列记录

 

 

 

 

corePoolSize:指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到*workQueue任务队列中去;*

maximumPoolSize:指定了线程池中的最大线程数量,这个参数会根据你使用的*workQueue任务队列的类型,决定线程池会开辟的最大线程数量;*

keepAliveTime:当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁;

unit:keepAliveTime的单位

workQueue:任务队列,被添加到线程池中,但尚未被执行的任务;它一般分为直接提交队列、有界任务队列、无界任务队列、优先任务队列几种;

threadFactory:线程工厂,用于创建线程,一般用默认即可;

handler:拒绝策略;当任务太多来不及处理时,如何拒绝任务;

 

首先搜集了下两种阻塞队列的差异:

ArrayBlockingQueue:内部维护了一个数组;

在初始化的时候,必须传入一个容量大小的值

 

LinkedBlockingQueue:内部维护的是一个链表结构,在生产和消费的时候,需要创建Node对象进行插入或移除,大批量数据的系统中,其对于GC的压力会比较大;

初始化时有默认的容量大小为:Integer.MAX_VALUE,当然也可以传入指定的容量大小,所以实际上也不是无限的长度

 

 

两种经典的线程池构造举例:

1.无界阻塞线程池

说明:10个线程执行,超过的任务放到阻塞队列,可能会引发资源耗尽 ExecutorService pool = new ThreadPoolExecutor(10, 10, 500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>())

 

2.有界阻塞线程池

说明:如果有界队列未满,维持在10个线程以内,否则线程数增长,直至到达100个后拒绝

ExecutorService pool = new ThreadPoolExecutor(10, 100, 500, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<>(20))

 

 

posted @ 2021-07-06 14:28  我曾溪底杀指玄  阅读(207)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3