news 2026/5/5 1:41:38

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
百度 写一段会发生死锁的代码

附代码:

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(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 1:40:25

时空注意力与对抗训练在视频导航中的应用

1. 项目背景与核心价值在计算机视觉与机器人导航领域,基于视频的路径规划一直存在两大痛点:长视距场景下的信息稀疏性,以及训练过程中常见的模式崩溃现象。SparseVideoNav项目正是针对这两个关键问题提出的创新解决方案。我曾在无人机自主巡检…

作者头像 李华
网站建设 2026/5/5 1:32:26

GRPO算法在机器人3D空间推理中的应用与优化

1. 项目背景与核心挑战在机器人控制领域,3D空间推理能力一直是实现智能操作的关键瓶颈。传统方法通常依赖预先编程的固定路径或大量人工标注数据,难以适应复杂多变的真实环境。我们团队最近尝试将GRPO(Generalized Reinforcement Learning wi…

作者头像 李华
网站建设 2026/5/5 1:30:27

Arm架构系统寄存器与SME特性深度解析

1. Arm架构系统寄存器基础解析系统寄存器是Arm处理器架构中的核心控制单元,它们像处理器的"控制面板"一样,管理着CPU的各种运行状态和功能配置。在Armv8/v9架构中,这些寄存器通过精心设计的编码空间进行访问,需要使用专…

作者头像 李华
网站建设 2026/5/5 1:29:28

AI模型适配器设计:统一接口实现多模型集成与标准化调用

1. 项目概述:一个连接AI模型与应用的“万能适配器”如果你正在尝试将不同的AI模型集成到自己的应用里,或者想为某个开源模型快速搭建一个标准化的API服务,那你大概率会遇到一个头疼的问题:每个模型的调用方式、输入输出格式、甚至…

作者头像 李华