1.java线程模型
1.1
java线程线程运行 加载到主内存后 read 读取通过总线程- load操作到cpu的工作内存-use到线程操作-assing操作将修改后变量
写回工作内存--store操作将cup的工作内存存储到主内存-通过write操作赋值主内存
最原始版本 总线锁 会在read操作前加上lock 在主内存修改后unlock 效率低下 并行转串行
两个线程之间是互不可见 为了解决 volatile
总线 MESI M修改 E独占 S共享 I失效
开启后cpu总线嗅探机制(监听) 任何修改 会导致其余线程失效 重新read
volatile 线程可见 禁止重排序(开启缓存一致性协议)
volatile是C语言 native本地库 核心 LOCK 缓存行锁定
volatile并不保证原子性 例如 线程一 store操作会使线程二 值失效 但是 会出现use assign 丢失问题 导致线程数据不一致