当前位置: 首页> 科技> 数码 > 中山市建设工程_视频剪辑制作_磁力搜索器下载_百度官网网站

中山市建设工程_视频剪辑制作_磁力搜索器下载_百度官网网站

时间:2025/9/13 0:34:17来源:https://blog.csdn.net/qq_52983535/article/details/146192044 浏览次数:1次
中山市建设工程_视频剪辑制作_磁力搜索器下载_百度官网网站

  • 使用Java实现死锁

使用Java实现死锁

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

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

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

具体代码如下:

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,正在吃饭");}}}
}
关键字:中山市建设工程_视频剪辑制作_磁力搜索器下载_百度官网网站

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: