---
title: volatile解决变量可见性
description: "volatile实现变量的可见性，会在写操作之后插入StoreLoad屏障，操作该关键字修饰的变量不会用CPU缓存，只能从内存中进行读取或写入。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenggrf/codeprtr/kunpengtaishanporting_12_0081.html
sourcePath: /source/zh/kunpenggrf/codeprtr/kunpengtaishanporting_12_0081.html
indexId: f77a7cbd617b9f01e250500d5e4ced2c94be69fca64be2a42338760d7b63f5eb65
---
# volatile解决变量可见性

volatile实现变量的可见性，会在写操作之后插入StoreLoad屏障，操作该关键字修饰的变量不会用CPU缓存，只能从内存中进行读取或写入。

如下代码有可能导致无法中断线程1，因每个线程在运行过程中都有自己的工作内存，那么线程1在运行的时候，会将stop变量的值拷贝一份放在自己的工作内存当中，在线程2更改了stop变量的值之后，但是还没来得及写入主存当中，线程2转去做其他事情了，那么线程1由于不知道线程2对stop变量的更改，因此还会一直循环下去。

```
线程1
boolean stop = false;
while(!stop){
doSomething();
}
线程2
stop = true;
```

使用volatile修饰stop变量可解决该问题。另外，volatile并不解决原子性问题，如volatile long count=0;有两个线程执行count++操作，得不到正确的结果。
