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

volatile 关键字是什么意思?

你了解到的什么地方使用了 volatile 关键字?解决了什么问题?

volatile 和 JMM 有什么关系?

什么是指令重排?volatile 和指令重排有什么关系?

什么是内存屏障?volatile 和内存屏障有什么关系?

什么是 happens-before?volatile 和它有什么关系?

如果单 CPU 的服务器,是否使用 volatile 对程序有影响吗?

两条语句,第一条是普通写,第二条是 volatile 写,其他线程对第一条普通写可见吗?

volatile int i;i++ 操作会有线程安全问题吗?

volatile 能否替代 CAS?

为什么 AQS 里面的 state 使用了 CAS 还需要 volatile?

Unsafe.putOrderedObject 是什么?能否替代 volatile?

可以认为 CAS + volatile = synchronized 吗?

解决可见性问题,使用了 synchronized 还需要 volatile 吗?

利用 volatile 手写一个懒汉式单例模式,并解释为什么这么写。

使用 volatile 手写一个生产者消费者程序吧。

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

1. volatile 究竟是什么?

2. volatile 解决了什么问题?

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

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

而爱问volatile关键字的面试官,大多数情况下都是有一定功底的,因为volatile作为切入点,往底层走可以切入Java内存模型(JMM),往并发方向走又可接切入Java并发编程,当然,再深入追究,JVM的底层操作、字节码的操作、单例都可以牵扯出来。

所以说懂的人提问题都是有门道的。那么,先整体来看看volatile关键字都设计到哪些点:内存可见性(JMM特性)、原子性(JMM特性)、禁止指令重排、线程并发、与synchronized的区别……再往深层次挖,可能就涉及到字节码、JVM等。

对与多线程和jvm,这两个也是现在面试的过程中 的重点考察对象,下面也为大家介绍一些资料,希望对大家有所帮助

多线程

文档:

源码解读多线程

多线程面试文档

知识导图

视频

需要这份资料的,扫码添加小助手,免费获取资料

jvm

文档

知识导图

视频

除了添加小助手之外

还可以关注公众号:Java架构师联盟,每日更新技术好文

围绕一个 volatile 关键字居然可以问出来 16 个问题的更多相关文章

  1. JAVA多线程---volatile关键字

    加锁机制既可以确保可见性又可以保证原子性,而volatile变量只能确保可见性. 当把变量声明为volatile时候 编译器与运行时都会注意到这个变量是共享的,不会将该变量上的操作与其他内存操作一起重 ...

  2. volatile关键字及内存可见性

    先看一段代码: package com.java.juc; public class TestVolatile { public static void main(String[] args) { T ...

  3. 多线程总结-同步之volatile关键字

    目录 1 案例引出可见性 2 案例引出原子性 1 案例引出可见性 代码解析:新起一个子线程执行m()方法,1秒后主线程将b置为false,子线程是否会停止执行死循环while(b){},打印" ...

  4. 详解volatile关键字和原子引用

    本篇看一下Volatile关键字和原子引用. 上图就是JUC包结构,总共分成三块 (1)java.util.concurrent:并发包基础类,包括阻塞队列,线程池相关类,线程安全Map等. (2)j ...

  5. 面试必问的volatile关键字

    原文: 卡巴拉的树   https://juejin.im/post/5a2b53b7f265da432a7b821c 在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度, ...

  6. Java面试官最常问的volatile关键字

    在Java相关的职位面试中,很多Java面试官都喜欢考察应聘者对Java并发的了解程度,以volatile关键字为切入点,往往会问到底,Java内存模型(JMM)和Java并发编程的一些特点都会被牵扯 ...

  7. Java面试官最爱问的volatile关键字

    在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...

  8. 每日一问:谈谈 volatile 关键字

    这是 wanAndroid 每日一问中的一道题,下面我们来尝试解答一下. 讲讲并发专题 volatile,synchronize,CAS,happens before, lost wake up 为了 ...

  9. 一个解释volatile关键字最好的例子

    小例子 public class VolatileTest { private static volatile int INIT_VALUE = 0; private final static int ...

随机推荐

  1. 面试必问系列之JDK动态代理

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  2. drf之序列化组件(一):Serializer

    序列化组件:Serializer.ModelSerializer.ListModelSerializer Serializer  偏底层  ModelSerializer       重点  List ...

  3. 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf

    上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时p ...

  4. app之功能测试

    1 什么是APP测试? App测试就是软件工程师对这类应用软件进行功能测试,性能测试,安全性测试以及兼容性测试等. 对于app测试我们一般采用的是黑盒测试方法,也会在必要的时候进行自动化测试以及性能测 ...

  5. python计算图像信息熵

    import cv2 import numpy as np import math import time def get_entropy(img_): x, y = img_.shape[0:2] ...

  6. Python分析最近大火的网剧《隐秘的角落》,看看网友们有什么看法

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 估计最近很火的连续剧<隐秘的角落>大家趁着端午假期都看过了吧? ...

  7. python 批量重命名文件

    # -*- coding: utf-8 -*- import os import sys def rename(): path = input("路径(例如D:\\\\picture):&q ...

  8. abp + vue 模板新建页面

    新建页面 创建按对应的模块和实体 新建的模块需要进行注册

  9. 超简洁!利用easyExcel导出,读入Excel

          x           深夜,在东莞,7天酒店,打开电脑,访问国内最大的同性交友网站.     日常开发中,导出导入场景非常多,尤其是对于后台管理更是一个列表一个导出,如果从导出的业务中抽 ...

  10. pycharm中连接MySql出现 Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.的错误解决

    具体异常如下: 这个异常特别烦人,是mysql连接驱动的问题,可以用二步解决: 第一步 从网上下载驱动,从mysql-connector-java_8.0.16-1ubuntu16.04_all.de ...