专栏首页微信公众号:Java团长围绕一个 volatile 关键字居然可以问出来 16 个问题

围绕一个 volatile 关键字居然可以问出来 16 个问题

对于 Java 每次面试就会想到多线程,多线程问题基本跑不了要问一下 volalite 关键字,可是我万万没想到居然一个 volatile 关键字可以连续问题出来 16 个问题!看下你能回答出来几个?

  1. volatile 关键字是什么意思?
  2. 你了解到的什么地方使用了 volatile 关键字?解决了什么问题?
  3. volatile 和 JMM 有什么关系?
  4. 什么是指令重排?volatile 和指令重排有什么关系?
  5. 什么是内存屏障?volatile 和内存屏障有什么关系?
  6. 什么是 happens-before?volatile 和它有什么关系?
  7. 如果单 CPU 的服务器,是否使用 volatile 对程序有影响吗?
  8. 两条语句,第一条是普通写,第二条是 volatile 写,其他线程对第一条普通写可见吗?
  9. volatile int i;i++ 操作会有线程安全问题吗?
  10. volatile 能否替代 CAS?
  11. 为什么 AQS 里面的 state 使用了 CAS 还需要 volatile?
  12. Unsafe.putOrderedObject 是什么?能否替代 volatile?
  13. 可以认为 CAS + volatile = synchronized 吗?
  14. 解决可见性问题,使用了 synchronized 还需要 volatile 吗?
  15. 利用 volatile 手写一个懒汉式单例模式,并解释为什么这么写。
  16. 使用 volatile 手写一个生产者消费者程序吧。

看了这么多问题其实我们不难看出来一个道理,虽然围绕 volatile 有各种各样的问题变种,但是都离不开他的原理

1. volatile 究竟是什么?

2. volatile 解决了什么问题?

3. volatile 怎么解决这些问题的?

这三个问题如果你弄明白了,其实上面的问题都很好回答。

本文分享自微信公众号 - Java团长(javatuanzhang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java面试官最爱的volatile关键字

    在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度,而以volatile关键字作为一个小的切入点,往往可以一问到底,把Java内存模...

    Java团长
  • Java并发编程:线程池的使用

      在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:

    Java团长
  • Java开发进销存管理系统(二)

    在进行进销存系统的设计和编码之前,首先设计一个自己的底层框架,这个底层框架在之后可以作为其它具体项目开发的一个基础,从而不必每次开发项目时,都去做很多重复的工作...

    Java团长
  • C++雾中风景13:volatile解惑

    volatile这个单词在英文之中的意思是:易变的,不稳定的的含义。所以顾名思义,一旦变量通过了volatile关键词修饰之后,说明变量是易变的和不稳定的。而C...

    HappenLee
  • Java 理论与实践: 正确使用 Volatile 变量

    Java 语言中的 Volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile 变...

    哲洛不闹
  • 【不要再背】volatile的可见性和原子性

    volatile保证可见性的原理是在每次访问变量时候都会进行一次刷新,因此每次访问都是准没存中最新的版本,所以volatile关键字的作用之一就是保证变量修改的...

    Java后端技术全栈
  • AtomicIntegerFieldUpdater

    对于volatile变量,写的时候会将线程本地内存的数据刷新到主内存上,读的时候会将主内存的数据加载到本地内存里,所以可以保证可见行和单个读/写操作的原子性。但...

    yiduwangkai
  • Java 并发编程:volatile的使用及其原理

    用户2140019
  • 深入理解volatile关键字

    Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatil...

    胖虎
  • 【java并发编程实战3】解密volatilevolatile的使用场景

    根据 as if serial原则,它强调了单线程。那么多线程发生重排序又是怎么样的呢?

    yukong

扫码关注云+社区

领取腾讯云代金券