Java中volatile关键字的最简单易懂的例子
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中volatile关键字的最简单易懂的例子,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1257字,纯文字阅读大概需要2分钟。
内容图文
![Java中volatile关键字的最简单易懂的例子](/upload/InfoBanner/zyjiaocheng/713/39bc103c05a440108a65781b054fa943.jpg)
我正在阅读Java中的volatile关键字并完全理解它的理论部分.
但是,我正在寻找的是一个很好的案例,它展示了如果变量不是易变的话会发生什么.
下面的代码段不能按预期工作(取自here):
class Test extends Thread {
boolean keepRunning = true;
public void run() {
while (keepRunning) {
}
System.out.println("Thread terminated.");
}
public static void main(String[] args) throws InterruptedException {
Test t = new Test();
t.start();
Thread.sleep(1000);
t.keepRunning = false;
System.out.println("keepRunning set to false.");
}
}
理想情况下,如果keepRunning不是volatile,则线程应该无限期地继续运行.但是,它会在几秒钟后停止.
我有两个基本问题:
>任何人都可以用例子解释volatile吗?不是来自JLS的理论.
>是同步的易失性替代品吗?它是否实现了原子性?
解决方法:
挥发性 – >保证可见性而非原子性
同步(锁定) – >保证可见性和原子性(如果正确完成)
易失性不能代替同步
仅在更新引用且不对其执行某些其他操作时使用volatile.
例:
volatile int i = 0;
public void incrementI(){
i++;
}
不使用同步或AtomicInteger将不是线程安全的,因为递增是复合操作.
Why program does not run indefinitely?
那取决于各种情况.在大多数情况下,JVM足够智能来刷新内容.
Correct use of volatile讨论了挥发性物质的各种可能用途.正确使用volatile非常棘手,我会说“如果有疑问,请将其保留”,请使用synchronized块.
也:
可以使用synchronized块代替volatile,但反之则不然.
内容总结
以上是互联网集市为您收集整理的Java中volatile关键字的最简单易懂的例子全部内容,希望文章能够帮你解决Java中volatile关键字的最简单易懂的例子所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。