浅聊多线程
话题一为什么要有多线程单线程只是单地将代码自上而下地运行如果程序阻塞或者耗时整个就卡住了多线程可以同时运行多段代码块解决了阻塞io问题同时可以将内存的性能充分释放提高了响应速率使得用户的使用体验更好不至于出现卡顿。话题二进程与线程的区别。进程是内存分配的最小单元线程是cpu分配的最小单元。在一个进程中至少包含了一个主线程并且在同一进程内所有线程共享资源。进程的的创建和切换开销大线程的创建和切换的开销相对轻量级但是由于cpu多核发展受限后来又发明了线程池。话题三线程的五大生命周期。新建new通过new thread 创建线程对象操作系统中还未创建真实线程不分配资源。就绪Runnable)调用 start后进入该状态其中又分两种情况1.就绪线程已经准备好了等待cpu分配时间片2.运行中线程抢到了cpu时间片执行run) 方法阻塞Blocked线程等待同步锁时进入阻塞等待Waiting主动无限的等不占用cpu需要其他线程主动唤醒也可计时等待 Timed_Waiting )终止(Terminated)run()正常执行完/异常终止线程结束资源回收无法再次启动。话题四并发与并行。并发多任务交替执行单核cpu即可并行多任务同时进行(需要有多核cpu话题五线程的创建方法。1.继承Thread类class MyThread extends Thread { Override public void run() { System.out.println(线程执行); } }2.实现runnable接口class MyRun implements Runnable { Override public void run() { System.out.println(Runnable 线程); } }3.匿名内部类lambda表达式Thread t new Thread(()-{ });话题六线程安全问题。1.线程安全是什么线程处理的数据是共享可变的多线程同时进行可能引起数据竞争。2.线程不安全的核心共享变量非原子操作指令重排和可见性问题3.解决方案同步锁synchronized原子类解决原子问题volatile解决可见性问题话题七线程池1.使用线程池的原因减少线程创建销毁的开销控制数量以及任务统一管理避免OOM内存溢出问题2.线程池核心参数1.核心线程数corePoolSize线程池常驻线程数即使空闲也不会被回收长期处理常规任务2.最大线程数maximumPoolSize线程池允许创建的最大线程总数任务激增时扩容3.空闲存活时间keepAliveTime非核心线程的空闲超时时间超时无任务则被回收4.任务队列workQueue存储待执行任务的阻塞队列核心线程满负载后任务进入队列5.拒绝策略handler线程数和队列均满负载时处理超额任务的策略。3.常用的线程池1.固定线程池FixedThreadPool核心线程数最大线程数线程数量固定适合负载稳定的批量任务2.缓存线程池CachedThreadPool无核心线程、最大线程数无限线程空闲自动回收适合短期、大量瞬时任务3.定时线程池ScheduledThreadPool支持延时、周期性执行任务适合定时巡检、定时统计场景4.自定义线程池ThreadPoolExecutor手动配置所有参数适配业务场景参数可控、无隐患企业开发唯一推荐。线程池开发规范与避坑1.禁止使用Executors工具类创建线程池原生线程池存在队列无界、线程数无限等问题极易引发OOM内存溢出2.必须自定义线程池根据业务QPS、任务耗时合理配置核心参数限制最大并发数3.拒绝策略按需选择核心业务使用自定义降级策略非核心业务可丢弃、告警4.必须处理任务异常线程池任务异常会静默消失导致业务无响应、问题难排查需全局捕获异常5.合理设置线程池名称方便日志排查、线程堆栈定位问题。话题八多线程开发中遇见的常见问题1.死锁问题四大要素不可少1互斥条件 2请求保持 3不可剥夺 4: 循环等待)public static void main(String[] args) throws InterruptedException { Object locker1 new Object(); Object locker2 new Object(); Object locker3 new Object(); Thread t1 new Thread(()-{ for(int i 0;i10;i){ synchronized (locker1){ try { locker1.wait(); System.out.print(A); synchronized (locker2){ locker2.notify(); } } catch (InterruptedException e) { throw new RuntimeException(e); } } } }); Thread t2 new Thread(()-{ for(int i 0;i10;i){ synchronized (locker2){ try { locker2.wait(); System.out.print(B); synchronized (locker3){ locker3.notify(); } } catch (InterruptedException e) { throw new RuntimeException(e); } } } }); Thread t3 new Thread(()-{ for(int i 0;i10;i){ synchronized (locker3){ try { locker3.wait(); System.out.println(C); synchronized (locker1){ locker1.notify(); } } catch (InterruptedException e) { throw new RuntimeException(e); } } } }); t1.start(); t2.start(); t3.start(); //先确保所有线程都执行到了wait,才能按照上述逻辑执行有两种方法1sleep 2用scanner阻塞 Thread.sleep(1000); synchronized (locker1) { locker1.notify(); } } }2.线程虚假唤醒private static volatile SingletonLazy instance null; private static Object locker new Object(); public static SingletonLazy getInstance() { //线程 A、线程 B 同时执行 getInstance() //此时 instance null两个线程都通过外层 if(instancenull) 判断 //A 先抢到同步锁进入代码块创建对象释放锁 //B 阻塞完拿到锁直接执行 new又创建了第二个对象 //最终出现两个不同实例单例失效。 // 内层 if 就是为了解决这个场景线程 B 拿到锁后再检查一次 instance发现已经不为 null直接跳过创建。 if(instance null) { synchronized (locker) { if (instance null) { instance new SingletonLazy(); } } } return instance; } private SingletonLazy(){ } } public class Demo28 { public static void main(String[] args) { Singleton t1 Singleton.getInstance(); Singleton t2 Singleton.getInstance(); System.out.print(t1 t2); } }本文仅限个人拙见希望大家能够帮我指出漏洞以及那些没学到的知识谢谢

相关新闻

中国限定宝可梦魔方:收藏价值与鉴别指南

中国限定宝可梦魔方:收藏价值与鉴别指南

这次我们来看一个特殊的宝可梦收藏品——中国限定版魔方。这个由知名创作者Tingman分享的"最稀有宝可梦魔方"引起了收藏爱好者的广泛关注,它不仅设计独特,更重要的是只有在中国市场才能购买到。作为宝可梦正版授权产品,这款魔方融合…

2026/10/20 15:19:17 阅读更多 →
史诗级重磅!全网沸腾!7 月 AI 迎来历史性拐点:手机离线 AI 全面解禁,300 款全球顶尖黑科技即将集中亮相,普通人彻底告别云端限制!

史诗级重磅!全网沸腾!7 月 AI 迎来历史性拐点:手机离线 AI 全面解禁,300 款全球顶尖黑科技即将集中亮相,普通人彻底告别云端限制!

离线 AI 时代正式到来!7 大手机厂商全部获批,上海世界人工智能大会将放出 300 款首发 AI 硬核产品2026 年 7 月 16 日,一条刷屏全网的 AI 重磅消息引爆科技圈,叠加即将于 7 月 17 日开幕的第九届世界人工智能大会,整个…

2026/10/21 3:55:06 阅读更多 →
GAN SG-1魔方磁力定位与波动结构设计深度解析

GAN SG-1魔方磁力定位与波动结构设计深度解析

魔方作为一种经典的益智玩具,近年来在结构设计和磁力系统上不断推陈出新。GAN SG-1 作为一款针对 SQ-1 魔方形态进行深度优化的新品,通过独家磁力设计和精准波动结构,在保持经典玩法的同时提升了手感和稳定性。对于魔方爱好者和速度玩家来说&…

2026/10/18 0:09:58 阅读更多 →

最新新闻

腾讯云ASR实时语音识别前端接入:WebSocket签名与音频处理实战

腾讯云ASR实时语音识别前端接入:WebSocket签名与音频处理实战

前阵子我在给一个内部工具加“实时转写”功能,要把对话语音实时转成文字用于内容分析。调研了一圈,最后选了腾讯云 ASR 实时语音识别。原本以为就是“拿麦克风录音,发到 WebSocket,收文本”三件事,实际做下来发现每个环…

2026/10/21 3:54:34 阅读更多 →
Linux V4L2视频采集四步流程:打开→查询→设置→启动

Linux V4L2视频采集四步流程:打开→查询→设置→启动

1. 项目概述:为什么V4L2是Linux视频设备的“底层语言”在Linux系统里,但凡你接触过USB摄像头、树莓派CSI模组、工业面阵相机,甚至某些PCIe采集卡,几乎绕不开一个词:V4L2。它不是某个具体软件,也不是命令行工…

2026/10/21 3:54:34 阅读更多 →
Flutter GestureDetector 手势系统深度解析:从原理到高性能实践

Flutter GestureDetector 手势系统深度解析:从原理到高性能实践

1. 为什么说 GestureDetector 是 Flutter 手势世界的“总开关”在 Flutter 开发中,你写过多少次onTap?又是否曾疑惑:明明只是点了一下屏幕,背后却触发了onTapDown、onTapUp、onTapCancel一整套回调?或者,你…

2026/10/21 3:54:34 阅读更多 →
Qwen2.5-VL跨硬件微调:LoRA与OFT在昇腾910B与4090上的实战

Qwen2.5-VL跨硬件微调:LoRA与OFT在昇腾910B与4090上的实战

这个项目的起因很现实:手上的多模态微调代码在单张4090上调得好好的,业务方突然要求国产算力平台也能跑,而基于Qwen2.5-VL的私域图像理解任务又必须保留原有效果。于是就有了标题里那条主线——从LoRA到OFT,从昇腾910B到4090&…

2026/10/21 3:54:34 阅读更多 →
深入Linux内存管理:伙伴系统与slab分配器核心原理

深入Linux内存管理:伙伴系统与slab分配器核心原理

前段时间在压测一个存储服务时,我发现一个奇怪的现象:明明内存总量还很充足,但每次接口申请一个8KB的连续块时,耗时总会偶发冲到几百微秒甚至毫秒级。查到最后,问题不在业务代码,而在内存管理这一层——更具…

2026/10/21 3:54:34 阅读更多 →
FFmpeg输入源处理:本地文件与网络流读取的底层逻辑与实战

FFmpeg输入源处理:本地文件与网络流读取的底层逻辑与实战

FFmpeg 这个工具,刚接触音视频开发的人往往会被它庞大的参数体系劝退,但真正用起来之后又会发现,很多看似复杂的需求,其实一条命令就能搞定。这次要聊的是 FFmpeg 读取本地文件和网络流这两种输入源的处理方式,属于系列…

2026/10/21 3:53:34 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →