我写了一个试图理解volatile的例子.
public class VolatileExample {
private volatile boolean close = false;
public void shutdown() {
close = true;
}
public void work(){
Thread t1 = new Thread(new Runnable(){
public void run(){
while (!close) {
}
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
while (!close) {
shutdown();
}
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args){
VolatileExample volatileExample = new VolatileExample();
volatileExample.work();
}
}
Run Code Online (Sandbox Code Playgroud)
它按照我的预期停了下来.但是,当我从volatile标签中取出volatile时,我已经尝试了很多次 - 我希望程序不会停止,因为线程t1无法看到线程t2对close变量所做的更改,但是程序每次都成功结束.所以我很困惑,现在我们可以做到没有挥发性,挥发性用于什么?或者你能给出一个更好的例子,它可以在使用volatile和不使用volatile之间产生影响吗?
谢谢!
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |