知名公司面试题:谈谈你对volatile关键字的理解

本文探讨了Java中volatile关键字的作用,它用于保证内存可见性和防止指令重排序。volatile不能确保原子性,例如在i++操作中。文章通过分析DCL双检锁示例,揭示了volatile在解决竞态条件时的局限性,并提供了如何修正的示例。
摘要由CSDN通过智能技术生成

作为一名java程序员,求职面试时,关于volatile关键字时常会遇到。张工最近到某知名互联网公司面试,面试官提出这样的一个问题:

谈谈你对volatile关键字的理解

张工一时间没有回答上来,面试官:你都工作三年了,怎么对volatile关键字都没掌握啊。

张工被面试官这么一说,都不好意思了。

对于一名java开发者,不管是在求职面试还是项目实际开发中,volatile都是一个需要掌握的知识点,是需要掌握好的。我们平时在阅读源码的过程中,时常会遇到volatile关键字,譬如Atomic类,通过源码我们会发现volatile无处不在。

为什么要用到volatile关键字?

在Java多线程的开发中有三种特性:

  • 原子性

  • 可见性

  • 有序性

volatile主要作用是保证内存可见性和防止指令重排序。

保持内存可见性

内存可见性(Memory Visibility):所有线程都能看到共享内存的最新状态。可见性就是指当一个线程修改了线程共享变量的值,其它线程能够立即得知这个修改。

每一个线程都有一份自己的本地内存,所有线程共用一份主内存。如果一个线程对主内存中的数据进行了修改,而此时另外一个线程不知道是否已经发生了修改,就说此时是不可见的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值