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

Java每日一练_模拟面试题1(死锁)

一、死锁的条件

死锁通常发生在两个或者更多的线程相互等待对方释放资源,从而导致它们都无法继续执行。死锁的条件通常被描述为四个必要条件,也就是互斥条件、不可剥夺条件、占有并等待条件和循环等待条件。

  1. 互斥条件:资源不能被共享,只能由一个线程使用。

  2. 不可剥夺条件:占有者不能强行剥夺资源,只能主动释放。

  3. 占有并等待条件:一个线程必须占有至少一个资源,并且等待获取其他资源。

  4. 循环等待条件:存在一个线程等待序列,其中的每个线程都占有至少一个资源并正在等待获取下一个线程所占有的资源。

下面是一个简单的Java代码示例,演示了如何创建一个死锁的情况:

public class DeadlockExample {private static Object resource1 = new Object();private static Object resource2 = new Object();public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {public void run() {synchronized (resource1) {System.out.println(Thread.currentThread() + " locked resource1.");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource2) {System.out.println(Thread.currentThread() + " locked resource2.");}}}});Thread t2 = new Thread(new Runnable() {public void run() {synchronized (resource2) {System.out.println(Thread.currentThread() + " locked resource2.");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (resource1) {System.out.println(Thread.currentThread() + " locked resource1.");}}}});t1.start();t2.start();}
}

二、如何解决死锁

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Yearning-MYSQL 审计平台部署
  • 导入数据到hive的几种方式
  • @RequestBody与@RequestParam
  • RabbitMQ 入门篇
  • 【数学建模】——【A题 信用风险识别问题】全面解析
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • 【文件fd】深入理解重定向和缓冲区
  • python-局部求和(赛氪OJ)
  • 2024年有什么赚钱的副业推荐半年还清贷款,成功变现12.3w的全套玩法都放这里了!!!
  • linux用户组练习
  • FastAPI之Depends
  • Scrapy 爬取旅游景点相关数据(五)
  • 【LLM】-14-搭建问答系统
  • 天气曲线echarts
  • PHP常用函数
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 10个最佳ES6特性 ES7与ES8的特性
  • Electron入门介绍
  • ERLANG 网工修炼笔记 ---- UDP
  • ES6 学习笔记(一)let,const和解构赋值
  • js如何打印object对象
  • markdown编辑器简评
  • Netty源码解析1-Buffer
  • webpack+react项目初体验——记录我的webpack环境配置
  • 阿里云Kubernetes容器服务上体验Knative
  • 给初学者:JavaScript 中数组操作注意点
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 聚类分析——Kmeans
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 优化 Vue 项目编译文件大小
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • (04)odoo视图操作
  • (3)STL算法之搜索
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (十六)视图变换 正交投影 透视投影
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)LINQ之路
  • (转)Sql Server 保留几位小数的两种做法
  • .gitignore文件使用
  • .net core使用ef 6
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .Net 应用中使用dot trace进行性能诊断
  • .net6 webapi log4net完整配置使用流程
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • [bzoj1038][ZJOI2008]瞭望塔