内存模型
1.Java内存模型
Java内存模型是Java Memory Model (JMM)的意思
JMM定义了一套在多线程读写共享数据时(成员变量、数组),对数据的可见性、有序性和原子性的规则和保障。
1.1 原子性
Java中,对静态变量的自增自减并不是原子操作
Java的内存模型如下,完成静态变量的自增、自减需要在主存和线程内存中进行数据交换:
1.2 解决方法
synchronized(同步关键字)
2.1 可见性
2.2 解决方法
volatile
3.1 有序性
3.2 解决方法
volatile
2.CAS与原子类
CAS即Compare and Swap,它体现一种乐观锁的思想,比如多个线程要对一个恭喜那个的整形变量执行+1操作:
获取共享变量时,为了保证该变量的可见性,需要使用volatile
修饰。结合CAS
和volatile
可以实现无锁并发,适用于竞争不激烈、多核CPU的场景下。
- 因为没有使用
synchronized
, 所以线程不会陷入阻塞,这是效率提升的因素之- - 但如果竞争激烈,可以想到重试必然频繁发生,反而效率会受影响
后面涉及到的synchronized优化,确实是听不太懂,放到学完JUC后再进行...
评论