目录

一、请谈谈volatile有什么特点,为什么它能保证变量对所有线程的可见性?

二、volatile能保证线程间的变量可见性,是不是就意味着基于volatile变量的运算就是并发安全的?

三、请对比下volatile和Synchronized的异同?

四、请谈谈ThreadLocal是怎么解决并发安全的?

五、谈谈你对ThreadLocal的理解,使用ThreadLocal需要注意些什么?


一、请谈谈volatile有什么特点,为什么它能保证变量对所有线程的可见性?

当一个变量被volatile修饰后,具备两个特性:

  • 保证此变量对所有线程的可见性,当一条线程修改了这个变量的值,新值对于其他线程是可以立即得知的,而普通变量做不到这一点。
  • 禁止指令重排序优化,普通变量仅仅能保证在方法执行过程中,得到正确结果,但是不保证程序代码的执行顺序。

内存模型定义了8种内存间操作来保证可见性:

  • lock/unlock
  • read/write
  • load/store
  • use/assgin

二、volatile能保证线程间的变量可见性,是不是就意味着基于volatile变量的运算就是并发安全的?

这很显然并不是的。基于volatile变量的运算在并发下不一定是线程安全的,volatile变量 在各个线程的工作内存,不存在一致性问题(各个线程的工作内存中volatile变量,每次使用前都要刷新到主内存),但是java里面的运算并不是原子操作,导致volatile变量的运算在并发下也不一定就是线程安全的。volatile只保证了可见性,并不能保证原子性。

三、请对比下volatile和Synchronized的异同?

  • Synchronized既保证了可见性,又保证了原子性,而volatile只能保证可见性,不能保证原子性;
  • volatile仅能使用在变量级别;Synchronized则可以使用在变量、方法、和类级别的;
  • volatile本质是在告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;Synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住;
  • volatile不会造成线程的阻塞;Synchronized可能会造成线程的阻塞;
  • volatile标记的变量不会被编译器优化;Synchronized标记的变量可以被编译器优化;

四、请谈谈ThreadLocal是怎么解决并发安全的?

ThreadLocal是Java提供的一种保存线程私有信息的机制,因为其在整个线程生命周期内有效,所以可以方便地在一个线程关联的不同业务模块之间传递信息,比如事务ID、Cookie等上下文信息。 ThreadLocal为每一个线程维护变量的副本,把共享数据的可见范围限制到同一个线程之内,其实现原理是,在 ThreadLocal类中有一个Map,用于存储每个线程的变量副本。

五、谈谈你对ThreadLocal的理解,使用ThreadLocal需要注意些什么?

  • ThreadLocal 变量解决了多线程环境下单个线程中变量的共享问题,使用名为ThreadLocalMap的哈希表进行维护(key为ThreadLocal变量名,value为ThreadLocal变量的值);
  • 设想如果将一个大对象放入ThreadLocal 中,并且还没有remove。那么就可能会造成OutOfMemoryError,如果不会造成OutOfMemoryError那么也会浪费Java堆内存。使用时需要注意以下几点:
  1. 线程之间的threadLocal变量是互不影响的;
  2. 使用private final static进行修饰,防止多实例时内存的泄露问题;
  3. 线程池环境下使用后将threadLocal变量remove掉或设置成一个初始值;

并发编程常见面试题总结五相关推荐

  1. 总结并发编程常见面试题

    Hello,你好呀,我是大白(●-●) 目录标题 并发编程常见面试题 并发编程常见面试题 在Java中守护线程和用户线程的区别? 线程与进程的区别 什么是多线程中的上下文切换 死锁与活锁的区别,死锁与 ...

  2. Java并发编程—常见面试题

    建议: 学习java并发前需要先掌握JVM知识 关于下面问题档案的详细解析都在后面推荐的相关系列文章中 一.线程安全相关 1.什么叫线程安全? 线程安全就是说多线程访问同一代码,不会产生不确定的结果. ...

  3. 并发编程常见面试题Synchronized 相 关 问 题

    Synchronized 相 关 问 题 问 题 一 : Synchronized 用 过 吗 , 其 原 理 是 什 么? 这 是 一 道 Java 面 试 中 几 乎 百 分 百 会 问 到 的 ...

  4. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习 面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  5. java 并发 面试_Java 并发基础常见面试题总结

    1. 什么是线程和进程? 1.1. 何为进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的.系统运行一个程序即是一个进程从创建,运行到消亡的过程. 在 Java 中,当我们启 ...

  6. Linux网络编程常见面试题

    概述 TCP和UDP是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流,TCP套接口是字节流套接口(str ...

  7. 【JUC并发】常见面试题:wait、sleep、park之间的区别,synchronized、ReentrantLock之间的区别,悲观锁与乐观锁

    wait 与 sleep 不同 sleep 是 Thread 方法,而 wait 是 Object 的方法 sleep 不需要强制和 synchronized 配合使用,但 wait 需要 和 syn ...

  8. “约见”面试官系列之常见面试题第五篇说说vuex登录信息(建议收藏)

    此篇文章是介绍利用 vuex 储存用户登录时的相关信息的使用方法. 声明:前面部分是刚开始对vuex的接触,后面部分是学习后对vuex使用的部分优化,想直接用最新的,可以直接找到 20200819 部 ...

  9. python五种可视化工具及六道常见面试题

    2017-12-26  吊炸天的  [Python五种可视化工具] 在 Python 中,将数据可视化有多种选择,正是因为这种多样性,何时选用何种方案才变得极具挑战性.本文包含了一些较为流行的工具以及 ...

  10. java多线程常用面试_java的多线程常见面试题

    并行和并发有什么区别? (推荐学习:java常见面试题) 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事 ...

最新文章

  1. Android 利用ListView制作带竖线的多彩表格
  2. 【安全报告】揭秘创建进程时ebx为什么指向peb的答案
  3. 《看完它面试必solo | 寻找C站宝藏》
  4. 51单片机实现三位十进制数加减乘除运算
  5. 主动型页面性能利器:Page Status
  6. 银联Apple Pay 总结
  7. 分享一个应届生与打工人找工作的数据参考网站
  8. ICCV 2019 | ActivityNet 挑战赛冠军方案—时序动作提名,边界匹配网络详解
  9. Oracle数据库被锁
  10. 全面分析RHCE7(红帽认证工程师)考试题目之 ----Samba文件共享篇
  11. Java魔法堂:注解用法详解——@SuppressWarnings(转)
  12. linux websocket服务安全组,在 linux 下安装并使用 websocket
  13. windows下activemq安装下载
  14. 机器视觉的四大类应用
  15. linux离线安装flex,Flexbuilder 3在Linux下安装
  16. selenium 模拟登录qq空间
  17. 经济学中的同比环比,负增长,正增长
  18. 华为matebook13安装折腾Debian11全过程
  19. MOOC人工智能原理学习笔记1
  20. 笔记本 原因代码: 0x500ff 关机类型: 关闭电源_关于笔记本电池更换的建议

热门文章

  1. 算法:回溯十四 Restore IP Addresses数字字符串还原为IP地址(2种解法)
  2. TouchId iOS简明教程
  3. linux命令行中的大括号,linux命令行学习(19):花括号扩展(brace expansion)
  4. iphone 抹除设备是什么意思_环保设备公司什么意思?|危汇网|
  5. 2021-10-25双塔模型
  6. git add/rm/mv文件到暂存区
  7. 编程计算二叉树的深度
  8. EDSR dataloader.py代码问题
  9. RNA_seq(1)植物转录组实战(上)之salmon进行索引建立和转录组定量
  10. 树上启发式合并算法概述及习题