百度|synchronized 和 volatile 的区别是什么?

百度|synchronized 和 volatile 的区别是什么?

聊这个之前 , 先简单介绍下几个概念:

  1. 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断 , 要么就都不执行
  2. 可见性:指当多个线程访问同一个变量时 , 一个线程修改了这个变量的值 , 其他线程能够立即看到修改的值
  3. 有序性:即程序执行的顺序按照代码的先后顺序执行
下面正式介绍他们之间的区别:
  1. volatile是线程同步的轻量级实现 , 性能比synchronized的要好
  2. volatile只能修饰变量 , synchronized可以修饰方法、代码块
  3. volatile被多线程访问不会被阻塞 , synchronized会
  4. volatile保证数据可见性、有序性 , synchronized保证原子性 , 可见性
  5. volatile保证多线程之间数据可见性 , synchronized保证多线程间资源同步问题 , 两个一般配合使用
\uD83D\uDE4F如果内容对您有帮助 , 希望您能多多点赞收藏加关注 , 激励作者创作出更加优质内容 , 谢谢!\uD83D\uDE4F
【百度|synchronized 和 volatile 的区别是什么?】