对volatile关键字的理解
来源:互联网 发布:淘宝屏蔽粉丝数 编辑:程序博客网 时间:2024/05/16 11:14
来看下面这样一个例子
public class ThreadTest { private static boolean stopRequested; public static void main(String[] args) throws InterruptedException { Thread backgroundThread = new Thread(new Runnable() { public void run() { int i = 0; while (!stopRequested) { i++; } } }); backgroundThread.start(); TimeUnit.SECONDS.sleep(1); stopRequested = true; }
我们希望backgroundThread 线程能够在睡眠一秒后停止,但是实际情况是线程陷入了死循环,这是为什么呢?
其实这跟编译器有关,编译器有两种模式,server和client,server模式下,编译器为了让线程运行更快,增加了对内存的优化,如果其中一个线程更改了一个公共变量,那么另一个线程将看不到,因为另外一个线程为了使得运行更快所以从寄存器或者本地cache中取值,而不是从内存中取值。在这个例子中mian线程修改了stopRequested变量,而backgroundThread 线程看不到这个变化,那么如何让线程看到这个变化呢?通过volatile关键字,在stopRequested关键字前添加volatile修饰.
阅读全文
0 0
- 对volatile关键字的理解
- 对volatile关键字的理解
- volatile关键字的理解
- volatile关键字的理解
- volatile关键字的理解
- C语言中对volatile关键字的理解
- 对C++中mutable、inline、volatile关键字的理解
- 对volatile的理解
- volatile关键字的初步理解
- 对关键字volatile的认识
- 彻底理解Volatile关键字 &Volatile关键字的使用方式
- 对的Volatile深入理解
- java中volatile关键字的理解
- Java:volatile 关键字的一点理解
- 关于Volatile关键字的一点理解
- 关于Java中的关键字volatile的理解
- java中volatile关键字的理解
- [笔记]对于关键字volatile的理解
- java回调
- 51nod 1240 莫比乌斯函数
- P2094 运输
- 2.3.1-分治法-归并排序
- 一个简单的防火墙(iptables)实例
- 对volatile关键字的理解
- Your project contains C++ files but it is not using a supported native build system
- 枚举——完美立方和
- Java优先级
- 在Linux上使用PGP签名验证文件完整性
- ion-input在ionic中的input,带label的带icon的输入框
- 递归——苹果数
- (10)外键、级联操作
- 文章标题