Java并发编程之验证volatile的可见性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java并发编程之验证volatile的可见性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1595字,纯文字阅读大概需要3分钟。
内容图文
![Java并发编程之验证volatile的可见性](/upload/InfoBanner/zyjiaocheng/637/6c06e399d0ee4330bedb18b58fe06e87.jpg)
Java并发编程之验证volatile的可见性
通过系列文章的学习,凯哥已经介绍了volatile的三大特性。1:保证可见性 2:不保证原子性 3:保证顺序。那么怎么来验证可见性呢?本文凯哥将通过代码演示来证明volatile的可见性。
前期准备:
共享变量 number 初始值是0,然后修改后的值为100;
两个线程,分别是:主线程Main以及线程名为A的线程
内部类:
可以看到有个方法将变量值修改成了100;
再来看看:
说明:
变量number不用volatile关键字修饰。主线程在运行后,启动子线程。名字为线程A。然后线程A将变量number的值修改成了100后,主线程对number的进行判断。如果numbr的值等于0的时候,就一直while循环。我们预期下结果:线程A修改完数据之后,输出的是100呢还是0呢?最后运行结束这个是否会输出呢?
我们来看看输出的结果:
编辑
可以看到控制台输出的结果,线程A更新完变量的值之后在自己内部获取到变量的值是更新后的,但是在主线程的工作缓存去获取后,依然是0.因为主线程依然还在运行着(红色按钮一直红色的),虽然线程A修改了共享变量的值,但是没有人通知主线程你获取的数据需要更新。这说明,在不用volatile修饰的时候,共享变量在线程A和主线程之间是不可见的。
我们再来试试使用volatile修饰共享变量后运行的结果。
使用volatile修饰变量
volatile int number = 0;
再来查看运行结果:
线程A 进入了。准备操作数据
线程A 更新数据完成。更新后的值为:100
==============main====运行结束.主线程Main获取到的值为:100
结论:
我们可以看到,运行结束语句也输出了。并且主线程获取到number的值就是修改后的100.
这次操作和上次操作唯一区别就是变量number添加了volatile关键字来修饰,但是主线程竟然能够获取到线程A修改后的数据,从而证明了volatile能够保证共享变量在其他线程的可见性。
Volatile第二个特性:不保证原子性的证明,欢迎继续学习凯哥【凯哥Java:kaigejava】下一篇文章《Java并发编程之验证volatile不能保证原子性》。
内容总结
以上是互联网集市为您收集整理的Java并发编程之验证volatile的可见性全部内容,希望文章能够帮你解决Java并发编程之验证volatile的可见性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。