使用volatile关键字修饰变量
示例代码:
public class MyThread extends Thread{
private volatile boolean flag = true;
@Override
public void run() {
while(flag){
// do something
}
}
public void stopThread(){
flag = false;
}
}
在上述代码中,flag变量被volatile关键字修饰,表示它的值有可能会被多个线程同时访问并修改。如果没有使用volatile关键字,那么flag的值在更新时有可能会被缓存到某个线程的工作内存中,而没有及时同步到主内存中,这时其他线程对flag的读取就会获得一个落后于实际更新值的值。使用volatile修饰变量可以强制线程每次读取变量的值时都先从主内存中获取最新值,避免了这个问题。