面试官:多线程问题你一问三不知,还要我怎么“放水”?

多线程和并发有什么区别? 因此,如果一个线程执行时间太长或被阻塞,线程的其余部分继续执行,没有任何问题。在其他实现中,例如在所谓的 Actor 模型下:每个 actor 可能是也可能不是不同的线程甚至进程,但是 actor 模型抽象抽象了您的任何多线程,并且您为 actor 编写代码,不知道如何actor 系统多线程(直到您需要对线程使用参数等进行性能调整)。尽管如此,多线程是您使用的许多软件和操作系统的主要组成部分,只是对于高并发而言,它本身并不总是足够好,需要使用额外的处理器和架构模式来完成某些类型的工作负载的极端并发性。 阅读详情

面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁?

程序员阿里:这个...死锁...

(一分钟后)

面试官:不知道?那好,说一下Lock 和 Synchronized 的区别?

程序员阿里:Lock是锁...

面试官:...会就会,不会就说不会,节省一下时间,sleep 和 wait 的区别总该知道吧?

程序员阿里:...不怎么了解

面试官:那多线程的几种实现方式,什么是线程安全,这总该知道吧?

程序员阿里:咱能换个技术点问吗?

面试官:连多线程并发你都一问三不知,还要我们怎么进行下去?

面试官:连多线程问题你都一问三不知,还要我怎么“放水”?

 


 

在Java开发中,多线程一般是指实现多个任务共同执行的技术,是一个比较基础,也很常用的技术。

要理解多线程,需要先搞懂几个概念:

进程:每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。

 

线程:线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程。

 

多线程:在单个程序中同时运行多个线程完成不同的工作,称为多线程。

 

并发:在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

多线程并发同样也是面试问题中很大概率会问到的技术点。

下面给大家整理了一套多线程并发相关的核心面试点,把所有多线程并发常见的面试题汇总到了一起。

这些知识点的导图和问题的答案详解的PDF文档都可以免费分享给大家,帮小编转发一下文章后,私信【多线程】免费领取!

Java多线程并发

 

 

 

 

1. JAVA 并发知识库

2. JAVA 线程实现/创建方式

1. 继承 Thread 类

2. 实现 Runnable 接口

3. ExecutorService、Callable<Class>、Future 有返回值线程

4. 基于线程池的方式

3. 4 种线程池

1. newCachedThreadPool

2. newFixedThreadPool

3. newScheduledThreadPool

4. newSingleThreadExecutor

4. 线程生命周期(状态)

1. 新建状态(NEW)

2. 就绪状态(RUNNABLE)

3. 运行状态(RUNNING)

4. 阻塞状态(BLOCKED)

  • 等待阻塞(o.wait->等待队列)
  • 同步阻塞(lock->锁池)
  • 其他阻塞(sleep/join)

5. 线程死亡(DEAD)

  • 正常结束
  • 异常结束
  • 调用 stop

5. 终止线程 4 种方式

1. 正常运行结束

2. 使用退出标志退出线程

3. Interrupt 方法结束线程

4. stop 方法终止线程(线程不安全)

6. sleep 与 wait 区别

7. start 与 run 区别

8. JAVA 后台线程

9. JAVA 锁

1. 乐观锁

2. 悲观锁

3. 自旋锁

  • 自旋锁的优缺点
  • 自旋锁时间阈值(1.6 引入了适应性自旋锁)
  • 自旋锁的开启

4. Synchronized 同步锁

  • Synchronized 作用范围
  • Synchronized 核心组件
  • Synchronized 实现

5. ReentrantLock

  • Lock 接口的主要方法
  • 非公平锁
  • 公平锁
  • ReentrantLock 与 synchronized
  • ReentrantLock 实现
  • Condition 类和 Object 类锁方法区别区别
  • tryLock 和 lock 和 lockInterruptibly 的区别

6. Semaphore 信号量

  • 实现互斥锁(计数器为 1)
  • 代码实现
  • Semaphore 与 ReentrantLock

7. AtomicInteger

8. 可重入锁(递归锁)

9. 公平锁与非公平锁

  • 公平锁(Fair)
  • 非公平锁(Nonfair)

10. ReadWriteLock 读写锁

  • 读锁
  • 写锁

11. 共享锁和独占锁

  • 独占锁
  • 共享锁

12. 重量级锁(Mutex Lock)

13. 轻量级锁

  • 锁升级

14. 偏向锁

15. 分段锁

16. 锁优化

  • 减少锁持有时间
  • 减小锁粒度
  • 锁分离
  • 锁粗化
  • 锁消除

10. 线程基本方法

1. 线程等待(wait)

2. 线程睡眠(sleep)

3. 线程让步(yield)

4. 线程中断(interrupt)

5. Join 等待其他线程终止

6. 为什么要用 join()方法?

7. 线程唤醒(notify)

8. 其他方法

11. 线程上下文切换

1. 进程

2. 上下文

3. 寄存器

4. 程序计数器

5. PCB-“切换桢”

6. 上下文切换的活动

7. 引起线程上下文切换的原因

12. 同步锁与死锁

1. 同步锁

2. 死锁

13. 线程池原理

1. 线程复用

2. 线程池的组成

3. 拒绝策略

4. Java 线程池工作过程

14. JAVA 阻塞队列原理

1. 阻塞队列的主要方法

  • 插入操作
  • 获取数据操作

2. Java 中的阻塞队列

3. ArrayBlockingQueue(公平、非公平)

4. LinkedBlockingQueue(两个独立锁提高并发)

5. PriorityBlockingQueue(compareTo 排序实现优先)

6. DelayQueue(缓存失效、定时任务)

7. SynchronousQueue(不存储数据、可用于传递数据)

8. LinkedTransferQueue

9. LinkedBlockingDeque

15. CyclicBarrier、CountDownLatch、Semaphore 的用法

1. CountDownLatch(线程计数器 )

2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行)

3. Semaphore(信号量-控制同时访问的线程个数)

16. volatile 关键字的作用(变量可见性、禁止重排序)

1. 变量可见性

2. 禁止重排序

3. 比 sychronized 更轻量级的同步锁

4. 适用场景

17. 如何在两个线程之间共享数据

1. 将数据抽象成一个类,并将数据的操作作为这个类的方法

2. Runnable 对象作为一个类的内部类

18. ThreadLocal 作用(线程本地存储)

1. ThreadLocalMap(线程的一个属性)

2. 使用场景

19. synchronized 和 ReentrantLock 的区别

1. 两者的共同点

2. 两者的不同点

20. ConcurrentHashMap 并发

1. 减小锁粒度

2. ConcurrentHashMap 分段锁

  • ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成

21. Java 中用到的线程调度

1. 抢占式调度

2. 协同式调度

3. JVM 的线程调度实现(抢占式调度)

4. 线程让出 cpu 的情况

22. 进程调度算法

1. 优先调度算法

2. 高优先权优先调度算法

3. 基于时间片的轮转调度算法

23. 什么是 CAS(比较并交换-乐观锁机制-锁自旋)

1. 概念及特性

2. 原子包 java.util.concurrent.atomic(锁自旋)

3. ABA 问题

24. 什么是 AQS(抽象的队列同步器)

1. Exclusive 独占资源-ReentrantLock

2. Share 共享资源-Semaphore/CountDownLatch

3. 同步器的实现是 ABS 核心(state 资源状态计数)

4. ReentrantReadWriteLock 实现独占和共享两种方式

答案预览:

 

 

 

 

这些知识点的导图和问题的答案详解的PDF文档都可以免费分享给大家,帮小编转发一下文章后,私信【多线程】领取!

Python高频面试题 - 多线程、多进程和协程的区别 + IO多路复用的作用 + 并发和并行 + 异步非阻塞 阅读详情

相关推荐

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

多线程和并发的区别

    并发与多线程之间的关系就是目的与手段之间的关系。    并发(Concurrent)的反面是串行,串行好比多个车辆行驶在一股车道上,它们只能“鱼贯而行”。而并发好比多个车辆行驶在多股车道上,它们可以“并驾齐驱”。并发的极致就是并行(Parallel)。多线程就是将原本可能是串行的计算“改为”并发(并行)的一种手段、途径或者模型。    因此,有时我们也称多线程编程为并发编程。当然,目的与手...

勿念先生的博客 5565

解决DevExpress汉化后不生效的5个常见问题及修复方法

本文详细解析了DevExpress汉化后不生效的5个常见问题及修复方法,包括汉化包部署位置验证、运行时缓存清除、权限与执行上下文排查、版本兼容性检测以及开发环境配置检查。通过实战案例和具体操作步骤,帮助开发者快速解决汉化失效问题,提升开发效率。

weixin_29232121的博客 261

多线程和并发区别

多线程是计算机程序设计中的一种技术,它允许程序同时执行多个线程,以提高程序的执行效率。在Java等编程语言中,多线程特性得到了很好的支持,通过提供线程类、同步机制等工具,方便程序员实现多线程程序。并发则是指在一个时间段内,多个任务或操作同时执行,但它们并不是真正的同时执行,而是交替执行。这意味着在任意时刻点,只有一个任务或操作在处理机上运行,但多个任务或操作会在很短的时间间隔内交替执行,给人造成同时执行的错觉。总的来说,多线程是并发实现的一种方式,它利用多个线程同时执行不同的任务来达到并发的效果。

蜗牛Clear的博客 659

用 Python 和 uiautomation 实现微信批量发送

思路是这样,将要发送的人员名单(包括称呼)以及发送内容都维护到Excel里,程序运行时读取Excel里内容,自动搜索人员姓名(微信昵称或备注名),填入要发送的内容,拼接上称呼(如果需要的话)自动点击发送,这样轮巡直至名单人员全部发送完成。、

jankingdom的专栏 1471

飞塔防火墙之Link Monitor

Link Monitor类似于SLA,飞塔防火墙线路质量探测的一个功能。

weixin_41903258的博客 2408

多线程与并发区别

Java中,并发通常通过多线程、异步编程、并发集合(如ConcurrentHashMap)以及锁(如ReentrantLock)等机制来实现。每个线程都是一个独立的执行流,它们共享程序的内存空间(堆内存)和系统资源,但每个线程都有自己独立的执行栈(栈内存)。总的来说,多线程是并发编程的一种具体实现方式,而并发是更广泛的概念,旨在提高程序的执行效率和响应能力。区别:多线程是实现并发的一种手段,但并发不仅限于多线程。联系:并发通常依赖于多线程或多进程来实现,因为单一线程(或进程)很难同时执行多个任务。

weixin_57763462的博客 790

Altium Concord Pro 的应用范围,安装,和使用范围

Altium Concord Pro 的应用范围,安装,和使用范围。保证满足两者软件的最低安装要求。 Altium Concord Pro 是配合Digapcb,和MCAD,Altium 和相应机械设计软件的基础和交换桥梁

hanzhaos的博客 1121

线程池是怎么确定繁忙线程得_面试官:连多线程问题你都一问三不知,还要我怎么“放水”?...

面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁?程序员阿里:这个...死锁...(一分钟后)面试官:不知道?那好,说一下Lock 和 Synchronized 的区别?程序员阿里:Lock是锁...面试官:...会就会,不会就说不会,节省一下时间,sleep 和 wait 的区别总该知道吧?程序员阿里:...不怎么了解面试官:那多线程的几种实现方式,什么是线程安全,...

weixin_39581964的博客 262

ArcGIS Pro MCP 开源:自然语言驱动的 AI 制图与分析

人工智能与大模型的快速发展,正推动专业软件从“手动操作”走向“自然语言控制”。模型上下文协议(MCP)作为连接 AI 与外部工具的标准接口,类似为 AI 安装的“USB 接口”,让大模型可以通过统一协议调用 GIS 软件能力。基于 ArcPy 构建的 ArcGIS Pro MCP 项目,将复杂的地图制图与空间分析封装为 112 个可被 AI 调用的工具,使文本指令直接驱动软件完成数据加载、符号化、出图乃至叠加统计等任务。对 GIS 工程师、数据分析师与测绘规划从业者而言,该开源项目显著降低专业软件使用门槛,

weixin_29054195的博客 274

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

面试官:你连多线程问题你都清楚,还想要我怎么“放水”?

面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁... (一分钟后) 面试官:不知道?那好,说一下Lock 和 Synchronized 的区别? 程序员阿里:Lock是锁... 面试官:...会就会,不会就说不会,节省一下时间,sleep 和 wait 的区别总该知道吧? 程序员阿里:...不怎么了解 面试官:那多线程的几种实现方式,什么是线程安全,这总该知道吧? 程序员阿里:咱能换个技术点问吗? 面试官:连多线程并发...

bieber007的博客 267

C++中为什么要引入引用变量?

C++引用机制的设计哲学在于平衡性能与安全性。它解决了指针的三个痛点:语法噪音、空指针风险和语义模糊,同时保持了指针的效率优势。引用必须绑定有效对象且不可重绑定的特性增强了安全性,其值语义语法更直观。尤其在运算符重载和const引用场景中,引用展现了不可替代的优势。本质上,引用是编译器优化的指针实现,体现了C++"零开销抽象"的核心思想——既保持底层性能,又提供高级抽象。这种设计允许开发者根据场景灵活选择指针或引用,反映了C++多范式共存的语言智慧。

教学 & 技术专栏 175

面试官:多线程这么基础的问题你都不了解,我就算“放水”你也不过关啊

面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁... (一分钟后) 面试官:不知道?那好,说一下Lock 和 Synchronized 的区别? 程序员阿里:Lock是锁... 面试官:...会就会,不会就说不会,节省一下时间,sleep 和 wait 的区别总该知道吧? 程序员阿里:...不怎么了解 面试官:那多线程的几种实现方式,什么是线程安全,这总该知道吧? 程序员阿里:咱能换个技术点问吗? 面试官:连多线程并发你都一问三

文章中资料均可获取,有需要请添加yunduoa2019即可 185

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

是面试官放水,还是公司实在是太缺人?这都没挂,字节原来这么容易进...

“字节是大企业,是不是很难进去啊?” “在字节做软件测试,能得到很好的发展吗? 一进去就有9.5K,其实也没有想的那么难”

kk_lzvvkpj的博客 6209

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

是面试官放水,还是企业实在是缺人?这都没挂,字节原来这么容易进...

本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到字节可以再给我一次机会,还是挺开心的。

hlsxjh的博客 1865

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

是面试官放水,还是公司实在是太缺人?,字节原来这么容易进...

上来就把前两位面试官问过的问题又重新问了一次,态度有些冷淡,多次在面试过程中打断我的回答,还不停diss面试者,搞的我有莫名些紧张。简历中有的信息就别重复闲扯啦,简单的由近到远介绍公司经历,然后介绍项目,突出项目中用到的技术点,你的职责,你的业绩,引导面试官去提问你熟练掌握的技能。本人211非科班,之前在华为和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到字节可以再给我一次机会,还是挺开心的。不然一直没想出来,沉默了半天,不仅会造成气氛尴尬,还会增加你的紧张,后边脑子就更不好使啦。

2301_77645573的博客 850

是面试官放水,还是公司实在是太缺人?这都没挂,京东原来这么容易进...

面试中1、自我介绍简历中有的信息就别重复闲扯啦,简单的由近到远介绍公司经历,然后介绍项目,突出项目中用到的技术点,你的职责,你的业绩,引导面试官去提问你熟练掌握的技能。2、不要给自己挖坑不要在面试中扯出一些你不熟悉的技能,面试官听到后都会跟着追问你。3、减少沉默的尴尬了解问题后,快速想思路,想不到就换种方式回答,或者回答一个类似技能点的答案。不然一直没想出来,沉默了半天,不仅会造成气氛尴尬,还会增加你的紧张,后边脑子就更不好使啦。4、分析面试官话语中想表达的想法经常 “嗯嗯, 可以。” – 鉴定安全。

2301_80119579的博客 2313

是面试官放水,还是公司太缺人?这都能过,字节跳动原来这么容易进...

直到现在,心情都还是无比激动! 本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到字节可以再给我一次机会,还是挺开心的。 本来以为有个机会就不错啦!没想到能成功上岸,在这里要特别感谢帮我内推的同学,中间投递比较曲折,是他帮了我很多,非常负责任全程跟进内推。

OKCRoss的博客 8430

是面试官放水,还是公司实在是太缺人?这都没挂,阿里巴巴原来这么容易进...

“阿里是大企业,是不是很难进去啊?” “在阿里做软件测试,能得到很好的发展吗? 一进去就有9.5K,其实也没有想的那么难” 直到现在,心情都还是无比激动! 本人211非科班,之前在字节和腾讯实习过,这次其实没抱着什么特别大的希望投递,没想到字节可以再给我一次机会,还是挺开心的。 本来以为有个机会就不错啦!没想到能成功上岸,在这里要特别感谢帮我内推的同学,中间投递比较曲折,是他帮了我很多,非常负责任全程跟进内推。

kk_lzvvkpj的博客 829

是面试官放水,还是实在公司太缺人?这都没挂,阿里巴巴原来这么容易进...

面试中1、自我介绍简历中有的信息就别重复闲扯啦,简单的由近到远介绍公司经历,然后介绍项目,突出项目中用到的技术点,你的职责,你的业绩,引导面试官去提问你熟练掌握的技能。2、不要给自己挖坑不要在面试中扯出一些你不熟悉的技能,面试官听到后都会跟着追问你。3、减少沉默的尴尬了解问题后,快速想思路,想不到就换种方式回答,或者回答一个类似技能点的答案。不然一直没想出来,沉默了半天,不仅会造成气氛尴尬,还会增加你的紧张,后边脑子就更不好使啦。4、分析面试官话语中想表达的想法经常 “嗯嗯, 可以。” – 鉴定安全。

okcross0的博客 6614

是面试官放水,还是公司实在是太缺人?这都没挂,华为原来这么容易进...

简历中有的信息就别重复闲扯啦,简单的由近到远介绍公司经历,然后介绍项目,突出项目中用到的技术点,你的职责,你的业绩,引导面试官去提问你熟练掌握的技能。

nhb687095的博客 3566
上一篇: 腾讯专家整理的面试全秘籍,我看了两个月,入职京东,税前30K,太香了!
下一篇: 今年行情这么差,到底如何进大厂?
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值