线程

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 丢失问题 导致线程数据不一致

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。