1)解决并发不是用锁就能解决吗,那SDK干嘛还要搞个原子类出来?

2)原子类是怎样使用的,比如说我要实现一个线程安全的累加器?

public class Test { AtomicLong count = new AtomicLong(0); // 原子类变量count void add10K() { int idx = 0; while(idx < 10000) { count.getAndIncrement();// 原子操作 } } }

3)原子类是无锁的,那他底层是靠什么来实现原子安全的?

4)什么是CAS呢?

5)假如我当前的值和我取出来的那份值不一样了,那该怎么办?

6)我们说凡事都有两面性,CAS他就没任何的缺点吗?

7)两个数值反正都是相同的,不影响我的更新,那我还在乎ABA干嘛?

8)怎样解决ABA问题呢?

9)前面我们使用原子类 AtomicLong 的 getAndIncrement() 方法替代了count = 1,从而实现了线程安全。原子类 AtomicLong 的 getAndIncrement() 方法内部就是基于 CAS 实现的,那 Java 是如何使用 CAS 来实现原子化的count = 1的?

10)unsafe.getAndAddLong() 方法的底层源码实现是怎样的?

11)SDK中提供了哪些原子类给我们使用?

cas和aqs在java中用处(java的原子类到底是啥)(1)

使用提示:Java 提供的原子类能够解决一些简单的原子性问题,但是我们所有原子类的方法都是针对一个共享变量的,如果你需要解决多个变量的原子性问题,建议还是使用互斥锁方案。原子类虽好,但使用要非常小心。

如果你觉得这篇文章对你有帮助 点赞关注,然后私信回复【888】即可免费获取Java进阶全套视频以及源码学习资料,