Java面试知识点总结③——多线程和并发

大纲

  • [x] 一、Java基础(语言、集合框架、OOP、设计模式等)
  • [x] 二、Java高级(JavaEE、框架、服务器、工具等)
  • [x] 三、多线程和并发
  • [x] 四、Java虚拟机
  • [x] 五、数据库(Sql、MySQL、Redis等)
  • [x] 六、算法与数据结构
  • [x] 七、计算机网络
  • [x] 八、操作系统(OS基础、Linux等)
  • [x] 九、其他

三、多线程和并发

0. Java 中的 volatile 变量是什么

Java 语言提供了一种稍弱的同步机制,即volatile变量。但是volatile并不容易完全被正确、完整的理解。一般来说,volatile具备2条语义,或者说2个特性。第一是保证volatile修饰的变量对所有线程的可见性,这里的可见性是指当一条线程修改了该变量,新值对于其它线程来说是立即可以得知的。而普通变量做不到这一点。

第二条语义是禁止指令重排序优化,这条语义在JDK1.5才被修复。

关于第一点:根据JMM,所有的变量存储在主内存,而每个线程还有自己的工作内存,线程的工作内存保存该线程使用到的变量的主内存副本拷贝,线程对变量的操作在工作内存中进行,不能直接读写主内存的变量。在volatile可见性这一点上,普通变量做不到的原因正因如此。比如,线程A修改了一个普通变量的值,然后向主内存进行回写,线程B在线程A回写完成后再从主内存读取,新变量才能对线程B可见。其实,按照虚拟机规范,volatile变量依然有工作内存的拷贝,要借助主内存来实现可见性。但由于volatile的特殊规则保证了新值能立即同步回主内存,以及


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部