浅聊多线程
话题一为什么要有多线程单线程只是单地将代码自上而下地运行如果程序阻塞或者耗时整个就卡住了多线程可以同时运行多段代码块解决了阻塞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/9/24 19:15:42 阅读更多 →
史诗级重磅!全网沸腾!7 月 AI 迎来历史性拐点:手机离线 AI 全面解禁,300 款全球顶尖黑科技即将集中亮相,普通人彻底告别云端限制!

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

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

2026/9/25 20:44:34 阅读更多 →
GAN SG-1魔方磁力定位与波动结构设计深度解析

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

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

2026/9/24 3:40:44 阅读更多 →

最新新闻

华为Atlas 300V 24G AI推理加速卡解析与YOLO部署实践

华为Atlas 300V 24G AI推理加速卡解析与YOLO部署实践

“Atlas 300V 24G 是运算加速卡吗?”这个问题,我在后台和技术群里看到过不下五六次。能理解,名字里带个V、宣传材料里又老提“视频分析”,很多人第一反应是“这难道是块视频采集卡、转码卡”,压根没往“跑深度学习模型…

2026/9/25 20:43:48 阅读更多 →
ArcMap拓扑原理与实战:空间关系校验的核心逻辑

ArcMap拓扑原理与实战:空间关系校验的核心逻辑

1. 这不是“画图”,是空间关系的体检与矫正——ArcMap拓扑到底在干啥?很多人第一次点开ArcMap里的“拓扑”菜单时,心里想的是:“不就是让线连上点、面不重叠吗?我手动修修不就完了?”——这恰恰是踩进坑的第…

2026/9/25 20:43:48 阅读更多 →
Atlas 300V部署YOLO全流程:从ONNX到OM的实践指南

Atlas 300V部署YOLO全流程:从ONNX到OM的实践指南

最近如果你在搜“Atlas”这个词,大概率会跟我一样,先看到一堆同名项目——Hadoop的元数据管理工具、MongoDB的云数据库、某机器人公司的双足机器人,甚至还有些乱七八糟跟AI没半点关系的系统。但如果你搜的是“Atlas部署YOLO”“Atlas 300V 24…

2026/9/25 20:43:48 阅读更多 →
Atlas 300V 24G部署YOLO全流程:从模型转换到性能调优

Atlas 300V 24G部署YOLO全流程:从模型转换到性能调优

最近被问得最多的一个问题就是:“Atlas 300V 24G 到底是不是运算加速卡,能不能拿来跑 YOLO?”说实话,每次听到这种问题我都知道提问者大概处在哪个阶段——十有八九是把 Atlas 当成“国产显卡”买回来了,结果插上板子、…

2026/9/25 20:43:48 阅读更多 →
旅游车队AI落地指南:老板与车调员的每日降本增效实战

旅游车队AI落地指南:老板与车调员的每日降本增效实战

1. 为什么旅游车队老板和车调员最该先用AI?——不是炫技,是把每天重复的“救火”变成“预判”旅游车队这行,我干了十二年,从开大巴到管二十台车,再到帮三家旅行社做车辆调度系统顾问。见过太多老板凌晨三点被导游电话叫…

2026/9/25 20:43:48 阅读更多 →
Atlas 300V 24G部署YOLOv8实战:从CANN工具链到ACL推理全流程解析

Atlas 300V 24G部署YOLOv8实战:从CANN工具链到ACL推理全流程解析

最近后台好几个做安防和工业检测的朋友都在问同一件事:Atlas 300V 24G到底算不算运算加速卡?能不能拿来部署YOLO?先把结论说清楚:它当然是运算加速卡,而且就是专门干AI推理这活的。但它不是NVIDIA那种GPU,驱…

2026/9/25 20:42:48 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →