文章目录
线程不安全之volatile关键字
上篇博文讲了线程不安全问题
https://editor.youkuaiyun.com/md/?articleId=111461834
可见性
- 就是说, 在多线程的环境下,某个共享变量A被其中一个线程修改了,其他线程就会知道有一个线程修改了这个共享变量A,然后其他线程若是要使用这个共享变量,就会直接去内存中去读取整个共享变量,而不是从自己的空间中去读取这个变量A。(线程自己的内存区域中存储着这个变量A的缓存地址,当他发现有别的线程去修改变量A的时候,就会强制让自己内存区域中的这个变量A的缓存地址无效,然后去从主存中去访问这个变量A,缓存和主存的内容是一致的)
- 被volatile申明的变量就具有可见性的性质
有序性
-
在我们基础的理解上 Java的代码执行是顺序执行的,但是在虚拟机里代码可能会进行重排序
int a = 1; //1 int b = 1; //2 a++; //3 b++; //4上面四行代码,无论先执行第三行 还是第四行 都不会最终对a的值和b的值产生影响,所以在虚拟机执行这些代码的时候就可能进行重排序。但是如果第三行代码需要执行的时候需要消耗5ms,但第四行只需要消耗1ms,所以当然就会先执行第四行。
-
但是在多线程里面就会可能出现问题了
boolean static ready = false

最低0.47元/天 解锁文章
2万+





