并发编程-多线程
1、看一下代码存在原子性问题?
2、锁
3、synchronize同步、互斥锁(重量级锁)
基本使用:
1、使用实例方法 锁当前实例(不同实例不会产生影响)
2、使用静态方法 锁的类级别的(不同实例产生互斥)
3、使用静态代码块 锁当前实例(不通实例不会产生影响)
截图中:demo1和demo2都是对象锁,只不过demo2可以在synchronize的代码块前后,写一些业务逻辑,只保护代码块中的内容
demo3和demo4是类锁级别(全局锁)
锁的存储:
轻量级锁(自旋):
重量级锁:
=========================================================================================
volatile关键字(保证可见性)lock:主线程修改stop的值对TI线程不可见
多了一个lock的汇编指令
JMM内存模型:(可见性)
导致可见性的根本原因是 高速缓存和重排序
JMM提供了合理的禁止缓存和重排序的方法来解决可见性问题
JMM最核心的价值是解决了可见性和有序性
加volatile关键字的变量,通过内存屏障,保证对变量的修改,一定是可见的