您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页线程安全之可见性问题

线程安全之可见性问题

来源:好走旅游网

一.可见性问题

1.CPU指令重排

比如代码

		boolean isTrue = true;
        while (isTrue){
            //...
        }

在循环判断执行一定次数,变量isTrue的值一直为true,则CPU就会将该代码进行指令重排

        boolean isTrue = true;
        if (isTrue) {
            //...
        }

变成if(true),这样在变量isTrue的值被更改后,还是不会出现

又比如代码如果在多线程的情况下

		//线程A
		int a = 10;
        a = 20;
        boolean flag = true;

线程B中的代码

	//线程B
	while(flag){
		System.out.println(a);
	}

如果指令重排将flag赋值true指令重排在 a = 20之前的话,输出的结果就会不一样了

2.CPU高速缓存

线程与主内存进行交互,中间还有层CPU高速缓存,而这段进出高速缓存期间也有极小的可能出现数据不一致的问题

二.volatile关键字

何为可见性?

让一个线程对共享变量的修改,能够及时的被其他线程看到 。

volatile为何能实现线程间的可见?

java内存模型中规定:

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务