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

百度 写一段会发生死锁的代码

附代码:

class Solution { // 也可写成 // private static final ReentrantLock LOCK_A = new ReentrantLock(); // private static final ReentrantLock LOCK_B = new ReentrantLock(); // 但是Lock接口是接口类型,ReentrantLock类型是实现类类型 // 如果不需要特有方法,用Lock接口即可,符合面向接口编程的原则,以后需要更换锁实现时方便 private static final Lock LOCK_A = new ReentrantLock(); private static final Lock LOCK_B = new ReentrantLock(); public void demoDeadlock() { Thread thread1 = new Thread(() -> { LOCK_A.lock(); try { System.out.println("Thread1: 持有锁 A"); // 强制让线程暂停执行(休眠),但不释放已持有的锁,确保一定死锁 Thread.sleep(100); LOCK_B.lock(); System.out.println("Thread1: 持有锁 A 和 B"); // 由于Thread.sleep()是一个可中断的方法,因此需要处理中断异常,这里打印异常和恢复中断(Thread.currentThread().interrupt())都可以,但不能抛出,因为Runnable的run()方法签名不允许抛出受检异常 } catch (InterruptedException e) { e.printStackTrace(); } finally { LOCK_B.unlock(); LOCK_A.unlock(); } }); Thread thread2 = new Thread(() -> { LOCK_B.lock(); try { System.out.println("Thread2: 持有锁 B"); // 强制让线程暂停执行(休眠),但不释放已持有的锁,确保一定死锁 Thread.sleep(100); LOCK_A.lock(); System.out.println("Thread2: 持有锁 B 和 A"); // 由于Thread.sleep()是一个可中断的方法,因此需要处理中断异常,这里打印异常和恢复中断(Thread.currentThread().interrupt())都可以,但不能抛出,因为Runnable的run()方法签名不允许抛出受检异常 } catch (InterruptedException e) { e.printStackTrace(); } finally { LOCK_A.unlock(); LOCK_B.unlock(); } }); thread1.start(); thread2.start(); } }

ACM模式:

import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { public static void main(String[] args) { Solution solution = new Solution(); solution.demoDeadlock(); } } class Solution { // 也可写成 // private static final ReentrantLock LOCK_A = new ReentrantLock(); // private static final ReentrantLock LOCK_B = new ReentrantLock(); // 但是Lock接口是接口类型,ReentrantLock类型是实现类类型 // 如果不需要特有方法,用Lock接口即可,符合面向接口编程的原则,以后需要更换锁实现时方便 private static final Lock LOCK_A = new ReentrantLock(); private static final Lock LOCK_B = new ReentrantLock(); public void demoDeadlock() { Thread thread1 = new Thread(() -> { LOCK_A.lock(); try { System.out.println("Thread1: 持有锁 A"); // 强制让线程暂停执行(休眠),但不释放已持有的锁,确保一定死锁 Thread.sleep(100); LOCK_B.lock(); System.out.println("Thread1: 持有锁 A 和 B"); // 由于Thread.sleep()是一个可中断的方法,因此需要处理中断异常,这里打印异常和恢复中断(Thread.currentThread().interrupt())都可以,但不能抛出,因为Runnable的run()方法签名不允许抛出受检异常 } catch (InterruptedException e) { e.printStackTrace(); } finally { LOCK_B.unlock(); LOCK_A.unlock(); } }); Thread thread2 = new Thread(() -> { LOCK_B.lock(); try { System.out.println("Thread2: 持有锁 B"); // 强制让线程暂停执行(休眠),但不释放已持有的锁,确保一定死锁 Thread.sleep(100); LOCK_A.lock(); System.out.println("Thread2: 持有锁 B 和 A"); // 由于Thread.sleep()是一个可中断的方法,因此需要处理中断异常,这里打印异常和恢复中断(Thread.currentThread().interrupt())都可以,但不能抛出,因为Runnable的run()方法签名不允许抛出受检异常 } catch (InterruptedException e) { e.printStackTrace(); } finally { LOCK_A.unlock(); LOCK_B.unlock(); } }); thread1.start(); thread2.start(); } }
http://www.jsqmd.com/news/754310/

相关文章:

  • 如何实现Windows极域电子教室破解:JiYuTrainer深度技术解析与实战指南 [特殊字符]
  • strtok和strerror函数的认识和使用
  • CPU高效推理引擎rwkv.cpp:基于RWKV与ggml的本地大模型部署指南
  • 用快马AI十分钟复刻Notepad++:快速构建轻量编辑器原型
  • Node.js 高并发场景下 Promise 并发数量限制怎么实现优化
  • ISAC系统中SIM辅助的约束优化与性能边界分析
  • 轻量级视觉语言模型Shallow-π:边缘计算部署实战
  • NS-USBLoader终极指南:5个核心功能轻松管理任天堂Switch游戏
  • SIMA 2:虚拟智能体的跨场景通用任务执行技术解析
  • YOLOv10-GPS: 基于地理位置约束的实时目标检测系统实现
  • constexpr if + template auto + immediate functions = 新范式?C++27三重组合技破解编译期反射瓶颈(GCC 14.2.0 nightly已支持)
  • 冒险岛游戏资源终极编辑指南:用Harepacker-resurrected打造个性化游戏体验
  • Python PyJWT 验证 token 时怎么防止算法混淆攻击漏洞?
  • ARM SME2指令集:SMLSLL与SMOPA矩阵运算优化解析
  • 终极解密指南:ncmdumpGUI让网易云音乐NCM文件重获播放自由
  • PHP 8.9类型系统重大升级:strict_type_mode支持per-directory配置(.phpini片段),但97%的DevOps尚未启用
  • 超声层析成像法气井放喷两相流相含率测量COMSOL【附代码】
  • 高斯信源与Hopfield网络:信息论与神经网络的联合优化
  • 手把手配置AUTOSAR SecOC FVM:以Davinci Configurator为例,详解多计数器模式
  • Vue开源在线图片海报设计工具网站源码
  • Spring Boot项目实战:5分钟集成EasyCaptcha图形验证码(附完整前后端代码)
  • 智能质量管理
  • Arm SME多向量存储操作指令详解与优化实践
  • YOLOv10-MRA:基于小波域特征分解与重构的多分辨分析目标检测算法
  • LangChain RAG 系统开发全指南
  • 【JVM向量化实战白皮书】:为什么92%的开发者配错-Djdk.incubator.vector.RuntimeFeature?权威配置矩阵首次披露
  • 实战指南:基于快马平台构建《我的世界》高级地图与服务器指令系统
  • 动态误差函数Derf:深度学习归一化新方案
  • OpenClaw系统诊断插件开发:构建Agentic Workflow的一键体检工具
  • SNP分析终极指南:快速提取基因组变异位点的完整工具