并发编程8_线程池

阻塞队列:

ArrayBlockQueue和LinkedBlockQueue的区别:

两者在锁上有区别

ArrayBlockQueue的生产者和消费者公用同一把锁 ,并且初始化时要制定容量大小,并且ArrayBlockQueue的数据结构是数组.

LinkedBlockQueue的生产者和消费者用的不同的锁, LinkedBlockQueue的数据结构是链表

跳表

其实跳表应该放在ConcurrentHashMap里的, 依旧先上大神博客链接,后续我再借鉴整理

一文搞定跳表

线程池

为什么要用线程池?

  1. 降低资源消耗,提升复用性
  2. 提高响应速度
  3. 提高线程的可管理性
  4. 控制线程的数量

任务特性:

CPU密集型 : 机器CPU核心数+1

IO密集型(磁盘,网络,数据库): 机器核心数+2

混合型(CPU密集,IO密集): 尽量拆分两个线程池. 如果两种任务的任务时间相差太大,那么拆分的必要性就不大了

可以通过Runtime.getRuntime.availbleProcessors() 来获取CPU逻辑核心数.

线程池的阻塞队列一般禁止使用无界队列.

例子:

比如高并发的数据库访问, 如果使用无界队列, 容易造成OOM, 整个系统都会崩溃. 而用有界可以避免这种情况.

 

线程池的重点:

  1. 如何合理配置线程池
  2. 线程池的参数对线程池工作机制的影响. 包括各个参数的含义.

上大神链接:

线程池的细节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值