synchronized和volatile

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰后,会保证不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量后是立即可见的。另外会禁止指令重排序。

volatile本质是告诉jvm当前变量在寄存器中的值不确定,需要从主存中读取。

synchronized是锁定当前变量,只有当前线程可以访问该变量。

1.volatile仅能使用在变量级别:

    synchronized则是用在变量,方法,类级别的

2.volatile仅能实现变量修改的可见性,并不能保证原子性;

 synchronized可以保证变量修改的可见性和原子性

3.volatile不会造成线程的阻塞

synchronized可能造成线程的阻塞

4.volatile标记的变量不会被编译器优化

synchronized标记的变量会被编译器优化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章