围绕一个 volatile 关键字居然可以问出来 16 个问题
对于 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 个问题的更多相关文章
- JAVA多线程---volatile关键字
加锁机制既可以确保可见性又可以保证原子性,而volatile变量只能确保可见性. 当把变量声明为volatile时候 编译器与运行时都会注意到这个变量是共享的,不会将该变量上的操作与其他内存操作一起重 ...
- volatile关键字及内存可见性
先看一段代码: package com.java.juc; public class TestVolatile { public static void main(String[] args) { T ...
- 多线程总结-同步之volatile关键字
目录 1 案例引出可见性 2 案例引出原子性 1 案例引出可见性 代码解析:新起一个子线程执行m()方法,1秒后主线程将b置为false,子线程是否会停止执行死循环while(b){},打印" ...
- 详解volatile关键字和原子引用
本篇看一下Volatile关键字和原子引用. 上图就是JUC包结构,总共分成三块 (1)java.util.concurrent:并发包基础类,包括阻塞队列,线程池相关类,线程安全Map等. (2)j ...
- 面试必问的volatile关键字
原文: 卡巴拉的树 https://juejin.im/post/5a2b53b7f265da432a7b821c 在Java相关的岗位面试中,很多面试官都喜欢考察面试者对Java并发的了解程度, ...
- Java面试官最常问的volatile关键字
在Java相关的职位面试中,很多Java面试官都喜欢考察应聘者对Java并发的了解程度,以volatile关键字为切入点,往往会问到底,Java内存模型(JMM)和Java并发编程的一些特点都会被牵扯 ...
- Java面试官最爱问的volatile关键字
在Java的面试当中,面试官最爱问的就是volatile关键字相关的问题.经过多次面试之后,你是否思考过,为什么他们那么爱问volatile关键字相关的问题?而对于你,如果作为面试官,是否也会考虑采用 ...
- 每日一问:谈谈 volatile 关键字
这是 wanAndroid 每日一问中的一道题,下面我们来尝试解答一下. 讲讲并发专题 volatile,synchronize,CAS,happens before, lost wake up 为了 ...
- 一个解释volatile关键字最好的例子
小例子 public class VolatileTest { private static volatile int INIT_VALUE = 0; private final static int ...
随机推荐
- 面试必问系列之JDK动态代理
.katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...
- drf之序列化组件(一):Serializer
序列化组件:Serializer.ModelSerializer.ListModelSerializer Serializer 偏底层 ModelSerializer 重点 List ...
- 39 _ 队列5 _ 循环队列需要几个参数来确定 及其含义的讲解.swf
上面讲解都是循环队列,如果是链表实现的话就很简单,队列只有循环队列才比较复杂 此时队列中只存储一个有效元素3,当在删除一个元素的时候,队列为空,pFont向上移动,pFont等于pRear,但是此时p ...
- app之功能测试
1 什么是APP测试? App测试就是软件工程师对这类应用软件进行功能测试,性能测试,安全性测试以及兼容性测试等. 对于app测试我们一般采用的是黑盒测试方法,也会在必要的时候进行自动化测试以及性能测 ...
- python计算图像信息熵
import cv2 import numpy as np import math import time def get_entropy(img_): x, y = img_.shape[0:2] ...
- Python分析最近大火的网剧《隐秘的角落》,看看网友们有什么看法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 估计最近很火的连续剧<隐秘的角落>大家趁着端午假期都看过了吧? ...
- python 批量重命名文件
# -*- coding: utf-8 -*- import os import sys def rename(): path = input("路径(例如D:\\\\picture):&q ...
- abp + vue 模板新建页面
新建页面 创建按对应的模块和实体 新建的模块需要进行注册
- 超简洁!利用easyExcel导出,读入Excel
x 深夜,在东莞,7天酒店,打开电脑,访问国内最大的同性交友网站. 日常开发中,导出导入场景非常多,尤其是对于后台管理更是一个列表一个导出,如果从导出的业务中抽 ...
- pycharm中连接MySql出现 Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.的错误解决
具体异常如下: 这个异常特别烦人,是mysql连接驱动的问题,可以用二步解决: 第一步 从网上下载驱动,从mysql-connector-java_8.0.16-1ubuntu16.04_all.de ...