java学习笔记:synchronized和volatile的理解

程序中的变量都是存储在主内存中的,每创建一个线程就会给他分配自己的内存空间。线程在使用变量时,会将主内存的变量复制到自己的内存中,然后对这个变量再进行操作。每个内存内部都会有自己的缓存区,多个线程共享主内存的同一个缓存区。

共享内存不可见性:

就是说,当一个线程对他们共享的主内存变量进行修改,其他线程无法看见这个变量已经修改,使用的还是自己原来缓存区的对象。

synchronize的内存语义:

被synchronize修饰的线程,它在使用变量时,会先把自己工作内存中的变量数据清除,直接从主内存中获取。(缺点独占锁,降低并发性)

volatile

被volatile修饰的线程就能每次看到其他线程对变量的改变,然后会再次从主内存中获取新值。它写入变量时,也不会放到主内存的缓存区,而是直接刷新到主内存,这样其他变量也能及时获取到最新值。

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

推荐阅读更多精彩内容