前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >synchronized关键字和volatile关键字的区别

synchronized关键字和volatile关键字的区别

作者头像
吉林乌拉
发布2019-08-14 17:50:02
7220
发布2019-08-14 17:50:02
举报
文章被收录于专栏:吉林乌拉吉林乌拉

synchronized

  • synchronized可以修饰方法和代码块
  • 多线程在执行synchronized方法时线程会阻塞
  • synchronized可以保证线程的原子性

volatile

  • volatile的性能比synchronized要高
  • volatile只能修饰变量
  • 多线程访问volatile时线程不会阻塞
  • volatile不能保证线程的原子性

线程原子性是指不能在被拆分的操作。在说的直白点就是我们知道线程在执行时是需要一个前提条件的那就是需要获取到系统CPU的执行资格,虽然线程获取到了执行资格但CPU也可以随时切换,不管线程是否执行完毕。线程原子性就是说如果线程已经获取到了CPU的执行资格,如果线程在没有执行完时,任何线程是不能够中断的。

下面的事例我们演示一下volatile关键字为什么不支持线程原子性。

我们看结果显示Thread-58和线程Thread-63输出count都是10000。这显然是不正确的。原因就是volatile关键字是不支持原子性也不支持同步性的。如果我们把count()方法添加synchronized关键字,那输出结果就是线程安全的了。

我们看结果上述的代码就是线程安全的了。这就是synchronized关键字和volatile关键字的区别。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档