沈阳网站建设模块wordpress查看数据库密码

张小明 2025/12/31 11:49:05
沈阳网站建设模块,wordpress查看数据库密码,老薛主机卸载wordpress,建站之星怎么弄相册文章目录 Java多线程三大困境#xff1a;死锁、活锁与饥饿的区别#xff1f;一、线程世界的“三大煞星”1. 死锁#xff08;Deadlock#xff09;死锁的形成条件死锁的经典示例 2. 活锁#xff08;Livelock#xff09;活锁的形成活锁的经典示例 3. 饥饿#xff08;Starva…文章目录Java多线程三大困境死锁、活锁与饥饿的区别一、线程世界的“三大煞星”1. 死锁Deadlock死锁的形成条件死锁的经典示例2. 活锁Livelock活锁的形成活锁的经典示例3. 饥饿Starvation饥饿的原因饥饿的经典示例二、如何解决这三大困境1. 解决死锁预防死锁的示例2. 解决活锁解决不活锁的示例3. 解决饥饿使用公平锁的示例总结希望这篇文章能帮助你更好地理解这些多线程问题并写出更健壮的代码 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把Java多线程三大困境死锁、活锁与饥饿的区别大家好闫工又来啦今天我们要聊的是Java多线程编程中三个让人头大的问题——死锁、活锁和饥饿。这三个词听起来都像是线程的“终极 boss”但实际上它们各有各的特点和解决办法。作为一名Java开发者我们不仅要认识它们还要学会如何在代码中避免这些陷阱。一、线程世界的“三大煞星”1. 死锁Deadlock死锁是多线程编程中最常见的问题之一。简单来说死锁是指两个或多个线程互相等待对方释放资源导致所有相关线程都无法继续执行。这种情况下程序会陷入停滞状态就像两辆车在十字路口对峙谁都不愿意先让开。死锁的形成条件要理解死锁我们需要知道它的四个必要条件互斥条件每个资源只能被一个线程占用。不可剥夺条件线程不能强行释放资源必须主动释放。请求和保持条件线程在等待其他资源时不会释放已经占有的资源。循环等待条件存在一组线程每个线程都在等待下一个线程释放的资源。死锁的经典示例下面是一个经典的死锁代码示例publicclassDeadlockExample{publicstaticvoidmain(String[]args){// 创建两个对象作为资源Objectlock1newObject();Objectlock2newObject();// 线程A先获取lock1再获取lock2ThreadthreadAnewThread(()-{synchronized(lock1){System.out.println(Thread A has lock1);try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(lock2){System.out.println(Thread A has both locks);}}});// 线程B先获取lock2再获取lock1ThreadthreadBnewThread(()-{synchronized(lock2){System.out.println(Thread B has lock2);try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(lock1){System.out.println(Thread B has both locks);}}});threadA.start();threadB.start();}}在这个例子中线程A和线程B可能会同时持有不同的锁并等待对方的资源最终导致死锁。2. 活锁Livelock活锁是另一种多线程问题。活锁是指线程不断尝试获取资源但由于某种原因总是失败从而无限循环而无法继续执行。与死锁不同活锁中的线程仍然在运行但它们无法完成任何有意义的工作。活锁的形成活锁通常发生在以下情况线程A和线程B都试图获取资源。两者同时检测到冲突然后尝试回退比如释放已占用的资源并重新开始。如果它们不断重复这个过程就会陷入活锁。活锁的经典示例下面是一个简单的活锁示例publicclassLivelockExample{publicstaticvoidmain(String[]args){// 创建两个线程尝试同时获取资源ThreadthreadAnewThread(()-{while(true){synchronized(LivelockExample.class){System.out.println(Thread A is trying to get the lock);if(Math.random()0.5){System.out.println(Thread A releases the lock);continue;// 释放锁并重新尝试}else{return;}}}});ThreadthreadBnewThread(()-{while(true){synchronized(LivelockExample.class){System.out.println(Thread B is trying to get the lock);if(Math.random()0.5){System.out.println(Thread B releases the lock);continue;// 释放锁并重新尝试}else{return;}}}});threadA.start();threadB.start();}}在这个例子中两个线程可能会不断释放和重新获取锁导致活锁。3. 饥饿Starvation饥饿是多线程编程中的另一个常见问题。饥饿是指某些线程由于优先级或其他原因长时间得不到 CPU 的调度或资源的访问机会从而无法完成任务。饥饿的原因饥饿通常发生在以下情况优先级倒置高优先级线程占据了资源导致低优先级线程无法获取资源。资源分配策略不合理某些线程总是被“插队”无法公平地获得资源。饥饿的经典示例下面是一个饥饿的示例publicclassStarvationExample{publicstaticvoidmain(String[]args){// 创建两个线程一个高优先级一个低优先级ThreadthreadAnewThread(()-{while(true){synchronized(StarvationExample.class){System.out.println(Thread A is running);try{Thread.sleep(100);}catch(InterruptedExceptione){}}}},HighPriority);// 降低线程A的优先级threadA.setPriority(Thread.MIN_PRIORITY);ThreadthreadBnewThread(()-{while(true){synchronized(StarvationExample.class){System.out.println(Thread B is running);try{Thread.sleep(100);}catch(InterruptedExceptione){}}}},LowPriority);// 提高线程B的优先级threadB.setPriority(Thread.MAX_PRIORITY);threadA.start();threadB.start();}}在这个例子中由于线程B的优先级更高它可能会一直占用资源导致线程A长时间得不到执行。二、如何解决这三大困境1. 解决死锁要避免死锁我们需要打破其中一个必要条件。以下是几种常见的方法预防通过设计避免同时获取多个锁。检测和恢复在代码中定期检查是否发生了死锁并采取措施恢复。预防死锁的示例publicclassDeadlockPrevention{publicstaticvoidmain(String[]args){// 确保所有线程都按相同的顺序获取锁ThreadthreadAnewThread(()-{synchronized(DeadlockPrevention.class){System.out.println(Thread A has lock1);try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(string){System.out.println(Thread A has both locks);}}});ThreadthreadBnewThread(()-{synchronized(DeadlockPrevention.class){System.out.println(Thread B has lock1);try{Thread.sleep(100);}catch(InterruptedExceptione){}synchronized(string){System.out.println(Thread B has both locks);}}});threadA.start();threadB.start();}}2. 解决活锁要解决活锁我们需要让线程在尝试获取资源时有一定的延迟或随机等待时间以避免无限循环。解决不活锁的示例publicclassLivelockSolution{publicstaticvoidmain(String[]args){ThreadthreadAnewThread(()-{while(true){synchronized(LivelockSolution.class){System.out.println(Thread A is trying to get the lock);if(Math.random()0.5){try{Thread.sleep(100);}catch(InterruptedExceptione){}continue;}else{return;}}}});ThreadthreadBnewThread(()-{while(true){synchronized(LivelockSolution.class){System.out.println(Thread B is trying to get the lock);if(Math.random()0.5){try{Thread.sleep(100);}catch(InterruptedExceptione){}continue;}else{return;}}}});threadA.start();threadB.start();}}3. 解决饥饿要解决饥饿我们需要确保所有线程都能公平地获得资源。以下是几种常见的方法使用公平锁Java 提供了ReentrantLock的公平模式。调整优先级策略避免优先级倒置。使用公平锁的示例importjava.util.concurrent.locks.ReentrantLock;publicclassStarvationSolution{privatestaticReentrantLocklocknewReentrantLock(true);// 公平锁publicstaticvoidmain(String[]args){ThreadthreadAnewThread(()-{while(true){try{if(lock.tryLock()){System.out.println(Thread A acquired the lock);try{Thread.sleep(100);}catch(InterruptedExceptione){}lock.unlock();}}catch(Exceptione){}}},HighPriority);threadA.setPriority(Thread.MIN_PRIORITY);ThreadthreadBnewThread(()-{while(true){try{if(lock.tryLock()){System.out.println(Thread B acquired the lock);try{Thread.sleep(100);}catch(InterruptedExceptione){}lock.unlock();}}catch(Exceptione){}}},LowPriority);threadB.setPriority(Thread.MAX_PRIORITY);threadA.start();threadB.start();}}总结死锁、活锁和饥饿是多线程编程中的三大困境但通过合理的设计和代码优化我们可以有效地避免这些问题。记住以下几点预防死锁确保所有线程按相同的顺序获取锁。解决活锁引入随机延迟或使用公平锁。避免饥饿使用公平锁并调整优先级策略。希望这篇文章能帮助你更好地理解这些多线程问题并写出更健壮的代码 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把成体系的面试题无论你是大佬还是小白都需要一套JAVA体系的面试题我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

苏州市建设安全监督局网站漂亮的logo设计图片

还在为AMD Ryzen处理器隐藏性能无法完全释放而困扰?想要深入硬件底层进行精细化调节却担心操作复杂?SMU调试工具作为专为Ryzen平台设计的开源性能优化利器,将为你彻底打开硬件潜能之门。这款工具支持手动超频、SMU监控、PCI设备调试等核心功能…

张小明 2025/12/29 8:58:46 网站建设

合肥市建设网官方网站佛山建网站公司

EmotiVoice语音样本展示平台搭建实践:在线试听系统开发记录 在智能语音内容爆发的今天,用户早已不再满足于“能说话”的机械音。无论是虚拟主播、AI教师,还是游戏中的角色对话,大家期待的是有情绪、有温度的声音——那种一听就能感…

张小明 2025/12/29 8:58:47 网站建设

东莞宣传网站网络舆情分析研判报告

最近在昇腾平台上跑Qwen3-30B的训练任务,要用混合精度加速。PyTorch原生的AMP在昇腾上支持不太好,查了一圈发现得用Apex for Ascend。网上教程不少,但都是基于官方容器的,我们这边用的是自己的基础镜像,按照官方文档编…

张小明 2025/12/29 8:58:47 网站建设

没网站可以做百度推广吗seocui cn

还在为繁重的职教云、智慧职教课程而头疼吗?每天花几个小时盯着屏幕刷课,既浪费时间又影响学习效率。现在,一款名为hcqHome的智能刷课助手横空出世,让你彻底告别枯燥的刷课时光! 【免费下载链接】hcqHome 简单好用的刷…

张小明 2025/12/29 8:58:46 网站建设

手机网站建设的规划做网站什么商品好

独立站在近两年被推上风口,很多人跟风涌入赛道,但并不知道为什么跨境电商要做独立站?今天这篇文章,希望能帮助正在建站或想要建站的朋友们建立起对独立站的基本认知,做到不踩坑、不试错,认清楚再开始。一、…

张小明 2025/12/29 8:58:48 网站建设

这样可以做网站搜索引擎优化的核心本质

一、简介:为什么 I2C 延迟决定整机实时性?工业现场:机械臂 IMU、温控模块、安全光栅大量挂在同一条 I2C 总线,>10 ms 延迟就会触发停机报警车载域控:毫米波雷达 摄像头 ECU 通过 I2C 配置寄存器,上电 1…

张小明 2025/12/29 8:58:48 网站建设