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

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

共享内存不可见性:

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

synchronize的内存语义:

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

volatile

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

你可能感兴趣的:(java学习笔记:synchronized和volatile的理解)