Java实现死锁

使用Java实现死锁

学习并发编程的死锁,之前在408的操作系统也学习过相关概念,今天使用Java代码自己实现了一下。

首先了解一下死锁的四个必要条件(发生死锁一定会发生下面四个情况):

互斥 (Mutual Exclusion): 资源一次只能被一个线程占用。 只有一个叉子或者叉子,不能两个人同时用
持有并等待 (Hold and Wait): 线程持有资源的同时,还在等待其他资源。 小明拿着勺子,还在等叉子
不可抢占 (No Preemption): 线程持有的资源不能被强行拿走。 勺子被小红拿了,不能抢
循环等待(Circular Wait): 线程形成环状等待。 小明等勺子 -> 小红等叉子 -> 小明等勺子(循环了!)

具体代码如下:

java 复制代码
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DeadLock {
    public static void main(String[] args) {
        table table = new table();
        new Thread(table::eat1, "小兰").start();
        new Thread(table::eat2, "小明").start();
    }

}
@Slf4j
class table{
    private final Object spoon = new Object();
    private final Object fork = new Object();

    public void eat1(){
        synchronized (this.fork){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            log.debug(Thread.currentThread().getName()+"先拿了fork,等待拿spoon");
            synchronized (this.spoon){
                log.debug(Thread.currentThread().getName()+"再拿了spoon,正在吃饭");
            }
        }
    }

    public void eat2(){
        synchronized(this.spoon){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            log.debug(Thread.currentThread().getName()+"先拿了spoon,等待拿fork");
            synchronized (this.fork){
                log.debug(Thread.currentThread().getName()+"再拿了fork,正在吃饭");
            }
        }
    }
}
相关推荐
deephub5 分钟前
LLM 幻觉的架构级修复:推理参数、RAG、受约束解码与生成后验证
人工智能·python·大语言模型·ai幻觉
im_AMBER6 分钟前
Leetcode 160 最小覆盖子串 | 串联所有单词的子串
开发语言·javascript·数据结构·算法·leetcode
Rabitebla8 分钟前
【数据结构】动态顺序表实现详解:从原理到接口设计(面试视角)
c语言·开发语言·数据结构·c++·面试·职场和发展
郝学胜-神的一滴17 分钟前
Linux 高并发基石:epoll 核心原理 + LT/ET 触发模式深度剖析
linux·运维·服务器·开发语言·c++·网络协议
A_aspectJ25 分钟前
Java开发的学习优势:稳定基石与多元可能并存的技术赛道
java·开发语言
云烟成雨TD26 分钟前
Spring AI Alibaba 1.x 系列【36】FlowAgent 和 BaseAgent 抽象类
java·人工智能·spring
qq_2837200527 分钟前
Python 模块精讲:collections —— 高级数据结构深度解析(defaultdict、Counter、deque)
java·开发语言
山半仙xs29 分钟前
基于卡尔曼滤波的人脸跟踪
人工智能·python·算法·计算机视觉
kronos.荒33 分钟前
动态规划——零钱兑换(python)
python·动态规划
2401_8371638936 分钟前
CSS如何实现网页打印样式优化_利用@media print重写布局
jvm·数据库·python