news 2026/4/16 13:00:12

常见的java线程并发安全问题八股

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
常见的java线程并发安全问题八股

线程中的并发安全

1、synchronized关键字的底层原理?

synchronized采用互斥的方式让同一时刻只有一个线程持有这个对象锁,它的底层是由jvm提供的monitor实现的,线程获得锁后会关联monitor,然后monitor内有三个属性owner、entryList、waitSet,如果owner为null,那线程就会正常执行,如果owner不为null,线程就会进入entryList阻塞,只有当拿到锁的线程释放锁后,阻塞中的这些线程才会去争抢owner,如果waitSet关联就是有调用wait()方法处于waiting状态。

2、monitor实现的锁为什么是重量级锁,你了解过锁升级吗?

因为monitor是用C++来实现的,它涉及到用户态和内核态的切换,进程上下文切换的成本高、性能比较低。然后synchronized有重量级锁、偏向锁、轻量级锁三种,锁升级就是在没有多线程竞争的时候当不同线程交替持有锁时使用轻量级锁,它就是修改了对象头的锁标志,每次修改都会执行CAS操作保证原子性。然后当锁只被一个线程持有时使用偏向锁,它就是在第一次获得锁时,会有一次CAS操作,后面再获取锁只需要在markwork中判断是否是自己线程id,而不是每次都执行开销相对较大的CAS操作。多线程竞争时只能使用重量级锁。

3、谈谈JMMjava内存模型)?

定义共享内存中多线程程序读写操作的行为规范,保证指令的正确性,JMM把内存分为2块,一块是线程私有的工作区域(工作内存),一块是所有线程的共享区域(主内存),线程跟线程之间是相互隔离的,线程跟线程交互需要通过主内存。

4、CAS你知道吗?

CAS(compare and swap)是比较再交换,体现乐观锁的思想,在无锁状态下保证线程操作共享数据的原子性,CAS一般用在AQS框架、AtomicXXX类,CAS在操作共享变量时候使用自旋锁,就是失败了自己再重试,效率更高CAS底层是调用Unsafe类的方法,都是操作系统提供的。

5、乐观锁和悲观锁的区别?

乐观锁像CAS基于乐观锁的思想是不怕别人来修改共享变量数据,改了那我自旋重试就好了。悲观锁像synchronized,防止别人来修改共享变量数据,我上了锁就只能我自己改,只有当我释放了锁别人才能用。

6、谈谈你对volatile关键字的理解?

volatile可以修饰共享变量像类的成员变量、类的静态成员变量,防止编译器优化等发生,让被它修饰后就保证了线程间的可见性和让读写共享变量时加入不同的屏障来阻止其他读写操作越过屏障,达到禁止进行指令重排序效果。

7、什么是AQS

AQS(abstract queued synchronized)是抽象队列同步器,是一种锁机制,它是JVM提供的构建锁或其他同步组件的基础框架,如ReentrantLock(阻塞式锁)、Semaphore(信号量)都是基于AQS实现的,AQS内部维护了一个先进先出的双向队列,队列中存储的是排队中的线程。

8、AQS的工作流程是什么?

AQS内部还有一种属性state,这个state就相当于一个资源,默认是0(无锁状态),如果队列中有一个线程修改了state为1,就相当于当前线程获得了资源,然后在对sate修改的时候用到了CAS来保证原子性。

9、都能作为锁那为啥有synchronized还要有AQS呢,它们有什么区别?

首先synchronized关键字是由C++实现,AQS是java实现,都是悲观锁,synchronized是自动释放锁,而AQS需要手动开启和关闭锁,然后synchronized锁竞争激烈时都是重量级锁,性能差,AQS锁竞争激烈时提供了多种解决方案。

10、ReentrantLock的实现原理是什么?

ReentrantLock是重入式锁,调用lock()方法获取锁后,再次调用lock是不会再阻塞的,它是基于CAS+AQS队列来实现的,ReentrantLock它的父类Sync继承了AQS(AbstractQueuedSynchronized),支持公平锁和非公平锁,构造方法接受一个可选参数(默认是非公平锁),当设置为true时是公平锁,否则为非公平锁。

11、synchronizedLock有什么区别?

分为3个层面,首先是语法层面:synchronized源码是在jvm中,由C++实现,Lock源码由jdk提供,是由java实现,使用synchronized时退出代码块,锁会自动释放,而Lock要手动调用unlock()方法释放锁。其次是功能层面:它们都是悲观锁,具有基本的互斥、同步、锁重入功能,Lock提供了一些synchronized没有的功能,如公平锁、可打断、可超时、多条件变量,Lock适用于不同场景的实现,如重入式锁ReentrantLock、读写锁ReentrantReadWriteLock。最后是性能层面:synchronized在没有竞争时,做了很多优化提供了偏向锁、轻量级锁,在竞争激烈时,Lock实现通常会提供更好的性能。

12、什么是死锁?死锁产生的条件是什么?

死锁是指两个或多个线程相互等待对方占有的资源而永远无法继续执行的状态。产生死锁需要同时满足以下四个条件

1、互斥:资源在任意时刻只能被一个线程占有。如果一个线程已经持有某个资源,其他线程就不能同时持有该资源。

2、占有且等待:一个线程已经保持了至少一个资源,并且又申请新的资源,而这个资源被别的线程占有,因此线程阻塞,但又不释放自己占有的资源。

3、不可抢占:资源不能被强制从线程手中剥夺,线程必须在完成任务后自行释放资源。

4、循环等待:存在一个线程循环等待资源的闭环,各线程都在等待下一个线程所占有的资源。

13、如何进行死锁的诊断呢?

可以使用jdk自带的工具:jps和jstack,jps就是会输出jvm运行的进程状态信息,jstack就是查看java进程内线程的堆栈信息。也可以使用jconsole、VisualVM这种可视化工具检查。

14、说说ConcurrentHashMap?

ConcurrentHashMap是一种线程安全的高效Map集合,JDK1.7底层采用的是分段的数组+链表实现,采用Segment分段锁范围较大,底层使用的是ReentrantLock。JDK1.8采用的数据结构和HashMap1.8一样,数组+链表+红黑二叉树,采用CAS+synchronized来保证并发安全,CAS用自旋控制数组节点的添加,synchronized只锁定当前链表或红黑树的首节点,只要hash不冲突,就不会出现并发安全问题,它相比采用Segment分段锁粒度更细、性能更好。

15、Java中怎么保证多线程的执行安全(导致并发程序出现问题的根本原因)?

并发的三大特性原子性、可见性、有序性,如果原子性不一致,可以使用加锁解决synchronized或lock,如果不是内存可见性的,可以使用volatile或synchronized或lock来解决,如果不是有序的,那就需要使用volatile来禁止重排。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 9:16:26

【基于 PyQt6 的红外与可见光图像配准工具开发实战】

前言 图像配准是计算机视觉中的重要技术,特别是在多模态图像融合领域。本文将介绍如何使用 Python 和 PyQt6 开发一个功能完善的红外与可见光图像配准工具,支持手动调整、批量处理和游戏化键盘控制。 项目背景 在实际应用中,我们经常需要…

作者头像 李华
网站建设 2026/4/11 4:04:05

基于Java+SSM的短剧推荐系统设计与实现(源码+lw+部署文档+讲解等)

课题介绍 本课题旨在设计并实现基于 JavaSSM(SpringSpringMVCMyBatis)框架的短剧推荐系统,针对当下短剧资源分散、推荐精准度低、用户筛选耗时、平台管理效率差等痛点,打造集短剧展示、智能推荐、内容管理、用户互动于一体的专业化…

作者头像 李华
网站建设 2026/4/11 18:38:43

Java计算机毕设之基于Web的学生宿舍管理系统JavaWeb寝室管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/13 10:39:27

全网最全9个一键生成论文工具,助本科生轻松搞定毕业论文!

全网最全9个一键生成论文工具,助本科生轻松搞定毕业论文! AI 工具的崛起,让论文写作不再难 在当前学术环境中,本科生面对毕业论文的压力日益增大,从选题到成稿,每一步都需要大量时间和精力。而 AI 工具的…

作者头像 李华
网站建设 2026/4/15 16:45:36

这几个日常行为,真的能帮娃预防近视!快码住

现在不少家长都在为娃的视力发愁,看着孩子小小年纪就眯着眼睛看东西,心里别提多着急了。其实预防近视不用搞复杂的套路,一些简单易坚持的日常行为,就能帮孩子守住清晰视力。今天就来跟大家分享几个实用方法,家长们可以…

作者头像 李华