系列:多线程(四)J.U.C简介

系列:多线程(四)J.U.C简介

构成

在这里插入图片描述

1. volatile和CAS

volatile:JVM和操作系统支持

  1. 可见
  2. 内存屏障:禁止重排

CAS:操作系统支持

  • 乐观锁的一种实现

2. AQS

实现基础:

  1. state标志位
  2. 模板方法模式:根据共享/互斥选择重写对应方法
  3. 同步队列CLH:节点的状态

3. 原子类

  • 原子更新基本类:boolean、int、long
  • 原子更新数组:int array、long array、reference array
  • 原子更新引用:reference、reference field、mark
  • 原子更新字段类:int field、long field、stamp field
  • 新增:
    • DoubleAccumulator
    • LongAccmulator
    • DoubleAdder
    • LongAdder

CAS存在ABA问题,Java提供AtomicStampedReference类(版本)避免该问题

4. Lock

特性:

  • 公平,非公平锁

  • 独享,共享锁

  • 可重入锁

ReentrantLock

互斥锁

支持:

  • 可重入

  • 公平,非公平(默认)

锁中断

ReadWriteLock

读写锁。共享读,互斥写

支持:

  • 可重入

  • 公平,非公平(默认)

锁中断

锁降级

5. 同步器

CountDownLatch

允许一个线程或多个线程等待(await),直到其他线程中执行的一组操作完成(countDown)

CyclicBarries

允许一组线程全部等待(await)彼此到达共同屏障点

CountDownLatch是一次性的,CyclicBarries可循环使用

Semaphore

信号量。一个计数信号量,取到许可的通行,取不到的阻塞(acquire),执行完释放许可(release)

6. 阻塞队列

写:队列慢,阻塞等待

读:队列空,阻塞等待

有界队列:ArrayBlockingQueue

可选有界:LinkedListBlockingQueue, LinkedListBlockingDeque

无界队列:PriorityBlockingQueue, DelayQueue, LinkedTransferQueue, LinkedBlockingDeque

SynchronousQueue:不存储元素

可选有界队列,指定了容量就是有界,否则就是无界

7. 线程池 & Executors

线程池的处理流程:

https://blog.csdn.net/qq_31854267/article/details/104009118

https://blog.csdn.net/qq_31854267/article/details/104017479

key

  • ThreadFactory
  • 任务队列:有界用的多,避免OOM,但是可能会丢失任务
  • 饱和策略

8. 并发容器

ConcurrentHashMap:7采用分段锁,8采用CAS

ConcurrentLinkedQueue:非阻塞链表,采用CAS

ConcurrentSkipListMap和ConcurrentSkipListSet:跳表

CopyOnWriteArrayList和CopyOnWriteArraySet:写复制

9. Fork/Join

并行执行任务的框架

特点:

  • 任务分隔
  • 工作窃取
  • 任务结果合并

参考

《Java多线程编程核心技术》

《Java并发编程的艺术》

https://blog.csdn.net/sifanchao/article/details/84343848?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159609975719724811818872%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159609975719724811818872&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-3-84343848.first_rank_ecpm_v3_pc_rank_v2&utm_term=AQS&spm=1018.2118.3001.4187

https://blog.csdn.net/qq_35190492/article/details/104691668?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159609975719724811818872%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159609975719724811818872&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-4-104691668.first_rank_ecpm_v3_pc_rank_v2&utm_term=AQS&spm=1018.2118.3001.4187

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值