当前位置: 首页 > news >正文

Java 基础 之 线程与线程池高频考点总结

1.Java 线程有哪几种创建方式?各自优缺点是什么?

三种方式,分别是:
继承Thread,实现简单,java单继承,不可以在继承其他类;
实现Runnable解耦任务和线程,推荐使用;
实现Callable可以获取线程执行结果,配合futrue使用;

2.线程有哪几种状态?sleep() 和 wait() 有什么区别?

六种状态,分别是new(任务刚创建)、runnable(执行中)、blocked(阻塞中)、waiting(无限等待)、timed-waiting(有限等待)、terminated(执行结束,线程杀死)
sleep():线程休眠,不释放锁,到时间自动唤醒;
wait():线程等待,释放锁,需要notify()/notifyAll()被唤醒;

3.为什么要用线程池?

1、避免重复创建或销毁线程,减少开销;
2、控制线程并发数量,避免服务器崩溃;
3、统一管理线程,方便监控;

4.线程池7大参数?

核心线程数、最大线程数、非核心线程空闲时、时间单位、阻塞队列、线程工厂、拒绝策略
常用参数含义
corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
maximumPoolSize : 当队列中存放的任务达到队列容量时,当前可以同时运行的线程数量变为最大线程数。
workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中
keepAliveTime:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁;
unit : keepAliveTime 参数的时间单位。
threadFactory :executor 创建新线程的时候会用到。
handler :饱和策略。关于饱和策略下面单独介绍一下。

5.线程池状态

Running → ShutDown → Stop → Tidying → Terminated

6.线程池监控与调优

看:activeCount、queue size、completedTaskCount
CPU 密集型:核心线程数 = CPU 核心数 + 1
IO 密集型:核心线程数 = 2 * CPU 核心数(或更高)

7.任务执行流程

任务提交,检查核心线程是否有空余,有直接执行;没有放入阻塞队列等待;若队列也满了,则新开一个线程执行,直到最大线程数。已达到最大线程数量则执行拒绝策略。

8.常见阻塞队列

ArrayBlockingQueue:有界数组队列
LinkedBlockingQueue:无界 / 有界链表队列(容易 OOM)
SynchronousQueue:不存元素,直接移交
PriorityBlockingQueue:优先级队列

9.4种拒绝策略

1、AbortPolicy:直接抛出异常(e bao t pao le sei)
2、CallerRunsPolicy:创建线程自己执行(kao ler runs )
3、DiscardOldestPolicy:将队列中最老的任务丢弃(dis car d o dei s t )
4、DiscardPolicy:直接丢弃任务

10.Executors 工具类的坑

FixedThreadPool:队列无界 → OOM
SingleThreadExecutor:队列无界 → OOM
CachedThreadPool:max 无限 → 线程暴增 → OOM
生产环境禁止用 Executors,必须手动 new ThreadPoolExecutor
Executors 是方便但不安全的工具类,因为队列无界或线程数无上限,高并发会 OOM,所以生产必须手动创建 ThreadPoolExecutor。

11.synchronized 可以锁什么?

修饰实例方法:锁当前对象
修饰静态方法:锁当前类的 Class 对象
修饰代码块:锁括号里的对象

12.锁升级过程

偏向锁 → 轻量级锁(自旋锁) → 重量级锁(OS 互斥锁)
无竞争:偏向锁、轻度竞争:轻量级锁、激烈竞争:重量级锁

13.死锁四个必要条件

互斥:资源同一时间只能一个线程用
请求与保持:拿着锁还去请求别的锁
不可剥夺:锁不能被强行抢走
循环等待:线程之间形成环路等待

14.volatile 有哪两个作用?能不能保证原子性?

保证可见性,一个线程修改完目标,其他线程立马可以看到
禁止指令重排序(防止半初始化对象)
不能保证原子性,不能替代锁

15.ThreadLocal 用来干嘛?使用时要注意什么?

threadlocal每个线程独立副本,线程安全
适用:用户信息、会话、事务上下文
使用完必须 remove(),否则会内存泄漏

http://www.jsqmd.com/news/677308/

相关文章:

  • Inter字体:专为屏幕阅读而生的终极解决方案
  • 抖音批量下载工具实战指南:从素材收集到高效管理
  • 工业Docker调试不再靠猜:基于eBPF的实时容器行为画像系统(已开源v2.3,仅限前200名工程师获取)
  • 电子放大器原理与应用全解析
  • 静音不等于没问题:振动噪声控制洁净工程的系统逻辑与落地方法
  • OpenRocket终极指南:5步完成专业火箭设计与仿真
  • STM32 PID温控系统实战:从零搭建±0.5°C高精度温度控制器
  • TMM投稿避坑指南:从10页限制到附页技巧,我的三篇论文实战经验分享
  • 在Ubuntu 20.04上为Android ARM64编译LLVM 15.0.7的保姆级避坑指南(附NDK 24配置)
  • 正交信号原理与应用:从复数基础到通信系统实现
  • STM32实战:手把手教你用CubeMX和HAL库搞定RS485 Modbus从机(附避坑指南)
  • 从原理到代码:手把手拆解GEE中OTSU算法实现MNDWI水体分割的全过程
  • TI C2000开发避坑指南:当SysConfig生成的board.c太大,导致CC8编译报错怎么办?
  • 无细胞膜蛋白表达与合成系统(eProtein Discovery)|Cell free system|膜蛋白
  • Linux命令:ping6
  • 如何快速部署AI短视频自动化生成系统
  • 技术排障笔记:图书馆WiFi无法SSH登录云服务器,一招搞定
  • 京东股权曝光:刘强东控制12.7%股权有73%投票权 获1亿美元股息
  • Desktop Postflop:免费开源德州扑克GTO求解器实战指南
  • 2026年山东广告投流与短视频代运营深度横评:GEO推广、腾讯广告、AI智能体全景对比 - 年度推荐企业名录
  • YOLO11涨点优化:注意力机制 | 基于频域的FcaNet多光谱通道注意力接入,打破传统GAP信息丢失魔咒
  • 终极桌面监控神器:TrafficMonitor插件完整指南,打造个性化系统仪表盘
  • WebLogic 10.3.6漏洞修复踩坑实录:从补丁下载到bsu.sh内存调整,一篇讲透
  • Fastboot Enhance:3步解决Android设备刷机难题的可视化工具指南
  • Neat Bookmarks:Chrome书签管理的终极免费解决方案
  • STM32新手避坑指南:用CubeMX和HAL库搞定VESC串口通信(附完整工程)
  • 用Cesium实现一个可拖拽的3D标记点:从屏幕点击到WGS84坐标的全流程解析
  • 2026水果店加盟哪家最专业?行业深度解析与选择指南 - 品牌排行榜
  • 哪个厂家生产的不锈钢板框过滤器质量好?一线用户口碑盘点 - 品牌推荐大师
  • 30天小白逆袭!收藏这份AI大模型学习计划,快速掌握前沿技术