volatile的使用

//资源(把
volatile去掉进行测试

public class Demo {
volatile int i =1;
}
//测试
public static void main(String[] args) throws InterruptedException {
//一份资源
Demo demo = new Demo();
//一个线程对资源进行修改
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
demo.i+=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//一个线程服务查看资源有没有修改
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if (demo.i==2){
/**
* 1、其他线程对变量的修改,可以及时反应在当前线程中;
* 2、确保当前线程对volatile变量的修改,能及时写回到共享内存中,并被其他线程所见;
* 3、使用volatile声明的变量,编译器会保证其有序性。
*/
System.out.println("变了!");
}
}
}
}).start();

}

猜你喜欢

转载自www.cnblogs.com/wangxl2018/p/9897079.html
今日推荐