码迷,mamicode.com
首页 > 其他好文 > 详细

synchronized和volatile

时间:2018-06-26 01:11:32      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:变量   锁定   线程   sync   ati   编译器   声明   ++   变化   

简述synchronized和volatile的区别

1、synchronized可以使用在变量、方法、类级别,而volatile只能使用在变量级别

2、synchronized可以保证变量修改的可见性和原子性,而volatile只能保证变量修改的可见性

3、synchronized有可能造成线程的阻塞,而volatile不会

4、synchronized标记的变量会被编译器优化,而volatile标记的变量不会被优化

5、volatile的变量若与自身相关,如以下的声明方式:n=n+1,n++等,那么声明为volatile的变量就不起作用

6、synchronized标记变量的时候是锁定变量,只能让一个线程可以拥有该变量,其他线程只能阻塞而volatile是告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取。直白点说就是当被标记的变量发生了变化时,它尽快让其他线程知道。

synchronized和volatile

标签:变量   锁定   线程   sync   ati   编译器   声明   ++   变化   

原文地址:https://www.cnblogs.com/huangzhang/p/9226812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!