JavaEE多线程(2) 1.死锁1.1产生死锁四个必要条件只要破坏其中一条就能打破死锁1互斥条件锁是互斥的同一时间只能一个线程拿到锁。2请求与保持线程拿到一把锁又申请另一把锁并且不释放锁。3不可剥夺锁只能自己主动释放别的不可抢夺。4循环等待线程a拿到锁1申请拿锁2。线程2拿到锁2申请拿锁1。形成了循环。上述代码执行过程首先t1先拿到锁lock1并且进入睡眠不释放lock1。然后t2拿到锁lock2也进入睡眠不释放lock2。当t1苏醒后在申请拿lock2此时锁lock2已经被占用会陷入堵塞。当t2苏醒后在申请拿lock1此时锁lock1已经被占用会陷入堵塞。此时陷入循环输出结果如下程序卡住不会结束解决方法我们可以对锁进行编号任何一个线程在有多把锁的时候加锁顺序由小到大加锁此时输出可达到预期2.volatile 关键字volatile用来解决由于内存可见性引起的线程安全问题什么是内存可见性问题实例在多线程中每个线程有着自己的工作内存不是直接读写主内存存共享变量线程a修改了变量但是只改在了自己的缓存里没有同步到主内存中线程b再从主内存中读取到的数据还是原来的比如下述例子解决上述方法就是给变量加上volatile 关键字private staticvolatileboolean flag false;再加上后修改flag值会立刻把修改后的值放回到主内存中并且清空其他线程的缓存副本在读volatile变量时直接从主内存中读不会从线程自己的工作缓存中读保证了一个线程修改 volatile 变量其他线程马上能读到最新值。volatile三个作用1保证内存的可见性2禁止指令重排序CPU / JVM 为了提升运行效率在不改变单线程执行结果的前提下会打乱代码执行顺序这就叫指令重排序。3不保证原子性3.wait 和notify3.1wait方法wait会使当前执行代码的线程进入等待队并且会释放锁等待唤醒唤醒条件其他线程调⽤notify⽅法。wait(long millis)可以设置最大等待时间时间到自动唤醒不等 notify。3.2notify()⽅法notify()会随机唤醒等待队列中的线程在notify()⽅法后当前线程不会⻢上释放该对象锁要等到执⾏notify()⽅法的线程将程序执⾏ 完也就是退出同步代码块之后才会释放对象锁notifyAll()唤醒该对象等待池全部线程。3.3代码演示注意必须在synchronized(obj){ }内部调用否则直接抛异异常执行结果3.4wait 和sleep的对⽐1锁行为wait()释放锁别的线程可以拿到这把锁。sleep()抱着锁睡觉如果在同步块里 sleep其他线程拿不到锁全部阻塞。2所属类wait是Object实例对象的方法lock.wait()sleep是线程静态方法Thread.sleep(1000)3唤醒区别wait要别的线程调用 notify /notifyAll 才会被唤醒也可以被中断sleep时间到自己醒不需要别的线程通知3位置wait需要搭配synchronized使⽤.sleep不需要

相关新闻

最新新闻

AI大模型培训机构怎么选?用RAG最小项目验证课程质量

AI大模型培训机构怎么选?用RAG最小项目验证课程质量

不管你是刚接触大模型开发,还是已经写过几个调用大模型接口的 demo,在面对“粤嵌科技、黑马程序员、华清远见这种机构到底怎么样、哪家值得报”这类问题时,都需要先有一个判断顺序:先搞清楚这一类机构普遍教什么,再建立…

2026/9/1 20:17:28
MiniMax H3 本地部署实战:5080显卡跑通一分钟长视频生成工作流

MiniMax H3 本地部署实战:5080显卡跑通一分钟长视频生成工作流

MiniMax H3 本地部署实战:5080 显卡跑通一分钟长视频生成工作流,附提示词与排错指南 做 AI 短视频内容的人,最近普遍有一种感受:云端视频生成工具越来越卷,排队却越来越久。想生成一条一分钟的竖屏短剧,往往…

2026/9/1 20:17:28
FDE实战:从RAG到Agent的AI应用生产落地指南

FDE实战:从RAG到Agent的AI应用生产落地指南

最近业界开始频繁出现 FDE(Forward-Deployed Engineer)这个称呼。很多刚从 LLM 入门转向业务落地的开发者,第一反应是:这不就是“部署工程师”换了个名字吗?实际了解之后会发现,它描述的是一类更特殊的角色…

2026/9/1 20:17:28
YOLOv8实战:高速公路抛洒物检测从数据集到部署全链路

YOLOv8实战:高速公路抛洒物检测从数据集到部署全链路

简介:面向高速公路抛洒物实时检测场景的YOLOv8工具包,兼顾算法演示与工程落地,适合本科毕设、课程设计或交通视觉原型验证。压缩包共11个文件,以pt模型权重、py训练/检测脚本与txt说明文档为主,整体约15.92MB&#xff…

2026/9/1 20:17:28
Dify 跑不通时,先按分层定位问题

Dify 跑不通时,先按分层定位问题

Dify 跑不通时,先按分层定位问题 很多 Dify 部署不是「模型不行」,而是某一层没有跑通。 Dify 页面打不开、模型一直 pending、知识库上传了却搜不到、工作流导入成功但运行报错、HTTP 节点显示接口通了但业务不可用,这些问题如果混在一起改…

2026/9/1 20:17:28
ESP32+TB6612FNG智能小车实战:从电机驱动到ROS接口

ESP32+TB6612FNG智能小车实战:从电机驱动到ROS接口

简介:本资源是一套面向嵌入式开发初学者与机器人爱好者设计的智能小车控制系统完整实现方案,聚焦ESP32平台下电机驱动、无线遥控、多传感器融合与ROS接口等核心能力落地。资源包共8个文件(42KB),含Arduino主控代码&…

2026/9/1 20:12:28