前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个诡异的“可见性”问题

一个诡异的“可见性”问题

作者头像
Java技术栈
发布2018-03-30 10:16:20
5110
发布2018-03-30 10:16:20
举报
文章被收录于专栏:Java技术栈

之前介绍过可见性的特性,最近做测试的时候发现了一个很诡异的问题,下面看看这三个例子。

test1:

test1这个例子加了volatile,所以程序正确退出输出test1 end

test2:

test2这个例子没有加volatile,程序也正常退出并输出一堆0并输出了test2 end,这是为什么呢?没有加volatile为什么也有可见性?看起来是很诡异的问题,问题是在while里面加了一行System..输出问题,打开源码看println方法里面加了synchronized同步块,正是因为这个同步块保证了里面变量x的可见性,这个诡异的问题也就解开了。

test3:

test3这个例子即没加volatile,也没有在while里面加System..输出语句,所以线程对变量n3的修改对主线程不可见,程序一直循环,没有输出结果。

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

本文分享自 Java技术栈 微信公众号,前往查看

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

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

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