Java 并发学习

基础

多线程学习怎样入门?

从 JDK 版本升级来看 Java 多线程发展

Java 多线程发展简史

concurrent 并发包

java.util.concurrent 并发包诸类概览

并发容器
同步线程
原子对象

Fork-join 框架
线程池

ThreadLocal

Java 多线程之 ThreadLocal

线程池

Java 线程池

【基本功】不可不说的Java“锁”事
在这里插入图片描述
Synchronized与ReentrantLock区别总结(简单粗暴,一目了然)

  • synchronized 是 Java 的关键字,ReenTrantLock 是 API,Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。
  • 性能差不多,synchronized 经过优化后。
  • ReenTrantLock 提供了一些高级功能,等待可中断,公平锁,锁绑定多个条件。

CAS

CAS虽然很高效,但是它也存在三大问题,这里也简单说一下:

  1. ABA问题。CAS需要在操作值的时候检查内存值是否发生变化,没有发生变化才会更新内存值。但是如果内存值原来是A,后来变成了B,然后又变成了A,那么CAS进行检查时会发现值没有发生变化,但是实际上是有变化的。ABA问题的解决思路就是在变量前面添加版本号,每次变量更新的时候都把版本号加一,这样变化过程就从“A-B-A”变成了“1A-2B-3A”。
    • JDK从1.5开始提供了AtomicStampedReference类来解决ABA问题,具体操作封装在compareAndSet()中。compareAndSet()首先检查当前引用和当前标志与预期引用和预期标志是否相等,如果都相等,则以原子方式将引用值和标志的值设置为给定的更新值。
  2. 循环时间长开销大。CAS操作如果长时间不成功,会导致其一直自旋,给CPU带来非常大的开销。
  3. 只能保证一个共享变量的原子操作。对一个共享变量执行操作时,CAS能够保证原子操作,但是对多个共享变量操作时,CAS是无法保证操作的原子性的。
    Java从1.5开始JDK提供了AtomicReference类来保证引用对象之间的原子性,可以把多个变量放在一个对象里来进行CAS操作。

同步容器

Vector
Stack
HashTable
Collections提供的同步集合类
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
DelayQueue

并发容器

Map

ConcurrentHashMap

深入浅出ConcurrentHashMap1.8

谈谈ConcurrentHashMap1.7和1.8的不同实现

漫画:什么是ConcurrentHashMap?

List

CopyOnWriteArrayList

Set

CopyOnWriteArraySet

Queue

ConcurrentLinkedQueue

原子对象

AtomicInteger

通过CAS来实现了乐观锁,AtomicInteger的自增函数incrementAndGet()的源码时,发现自增函数底层调用的是unsafe.getAndAddInt()。

Java魔法类:Unsafe应用解析

同步设备

  • CountDownLatch
  • CyclicBarrier
  • Semaphore

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值