volatile适用场景

一直对volatile 这个使用的场景觉得迷惑,今天看道了一片关于volatile的博文,分享一下。

volatile适用场景

volatile适用于不需要保证原子性,但却需要保证可见性的场景。一种典型的使用场景是用它修饰用于停止线程的状态标记。如下所示

1
2
3
4
5
6
7
8
9
10
11
12
13
boolean isRunning = false;
 
public void start () {
new Thread( () -> {
while(isRunning) {
someOperation();
}
}).start();
}
 
public void stop () {
isRunning = false;
}

 

在这种实现方式下,即使其它线程通过调用stop()方法将isRunning设置为false,循环也不一定会立即结束。可以通过volatile关键字,保证while循环及时得到isRunning最新的状态从而及时停止循环,结束线程。

猜你喜欢

转载自robustwang.iteye.com/blog/2398848