专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
芋道源码  ·  如何加快 SQL 查询速度的同时保持 ... ·  2 小时前  
芋道源码  ·  Spring Boot 3.2 ... ·  昨天  
芋道源码  ·  如何搭建漂亮的 SpringBoot 脚手架? ·  2 天前  
51好读  ›  专栏  ›  java那些事

你真的了解volatile吗?

java那些事  · 公众号  · Java  · 2019-03-20 16:00

正文

请到「今天看啥」查看全文



解决共享变量可见性问题,需要用volatile关键字修饰


如下图代码就不会出现死循环:



那么为什么能解决死循环的问题呢?


可见性的特性总结为以下2点:


对volatile变量的写会立即刷新到主存


对volatile变量的读会读主存中的新值


可以用如下图更清晰的描述:



如此一来,就不会出现死循环了。


为了能更深刻的理解volatile的语义,我们来看下面的时序图,回答这2个问题:



问题1:t2时刻,如果线程A读取running变量,会读取到false,还是等待线程B执行完呢?


答案是否定的,volatile并没有锁的特性。


问题2:t4时刻,线程A是否一定能读取到线程B修改后的最新值


答案是肯定的,线程A会从重新从主存中读取running的最新值。


还有一种办法也可以解决死循环的问题:







请到「今天看啥」查看全文