分享一个诡异的可见性问题

简介: 分享一个诡异的可见性问题

image.png

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


test1:


image.png


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


test2:


image.png


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


image.png


test3:


image.png


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


相关文章
|
安全 小程序 程序员
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(2)
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!
106 0
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(2)
|
Apache 云计算 开发者
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!
161 0
删库跑路大神「后悔」了?我只不过犯了大家都会犯的编程错误!(1)
|
Python
遇到bug不要慌,先发个文章看看
遇到bug不要慌,先发个文章看看
128 0
|
Java 中间件 程序员
最网最全bug定位套路,遇见bug再也不慌了
最网最全bug定位套路,遇见bug再也不慌了
318 0
|
存储 SQL Web App开发
你们的系统真的安全吗?你们系统是不是也有这种诡异的情况呢?
这个文章来源灵感是公司的项目在安全检查的时候,发现了很多 SQL 注入的一些问题还有一些 XSS 攻击问题,SQL 注入我们都是比较了解的,那么什么是 XSS 攻击呢?测试反馈给我的时候我是一脸懵逼呀,现在我们就来说一下什么是 XSS 攻击,以及我们怎么防止它的出现。
|
Java Spring
遇到 400、500 错误千万不要慌!
很多人都会在平时开发过程中遇到400或500异常,并且也没有走到服务端controller中,就变得有些不知所措。 我们知道SpringMVC从DispatchServlet开始接收与分发请求,从入口开始debug,还能找不到问题所在么? 从DispatchServlet的doDispatch()方法开始处理请求:
374 0
|
Python
代码遇到异常怎么办?不要慌,来看看这个!
先引入一个网上找的表格 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) ...
1118 0
|
存储 SQL Java
一切都来得及,千万别放弃
距离2018届毕业,还有不到半年。 我是普通本科,投递Java后台开发。截至今天,本人已获得CVTE、金蝶、锐捷网络、百度上海研发中心实习生、深信服、美团、北京好未来的offer(按时间获得的先后顺序)。
1818 0