一、定义

  线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。

当然死锁的产生是必须要满足一些特定条件的: 
1.互斥条件:进程对于所分配到的资源具有排它性,即一个资源只能被一个进程占用,直到被该进程释放 
2.请求和保持条件:一个进程因请求被占用资源而发生阻塞时,对已获得的资源保持不放。 
3.不剥夺条件:任何一个资源在没被该进程释放之前,任何其他进程都无法对他剥夺占用 
4.循环等待条件:当发生死锁时,所等待的进程必定会形成一个环路(类似于死循环),造成永久阻塞。

package com.sxy.thread;

/**
* 线程Thread1率先占有了resource1, 继续运行时需要resource2, 但此时resource2却被线程Thread2占有了,
* 因此只能等待Thread2释放resource2才能够继续运行; 同时,Thread2也需要resource1,
* 它只能等待Thread1释放resource1才能够继续运行, 因此,Thread1和Thread2都处于等待状态,
* 谁也无法继续运行,即产生了死锁。

什么是死锁以及避免死锁相关推荐

  1. SQL Server-聚焦深入理解死锁以及避免死锁建议(三十三)

    前言 终于进入死锁系列,前面也提到过我一直对隔离级别和死锁以及如何避免死锁等问题模棱两可,所以才鼓起了重新学习SQL Server系列的勇气,本节我们来讲讲SQL Server中的死锁,看到许多文章都 ...

  2. python 线程死锁_python线程死锁与递归锁

    死锁现象 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去. 此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待 ...

  3. 哲学家就餐与死锁问题,死锁产生的条件以及解决方案

    请结合经典案例-哲学家就餐,来谈谈你对死锁的理解,以及怎么预防和解除死锁? 哲学家就餐 描述:在一张圆桌上,有n个哲学家,n支筷子,他们的生活方式只是交替地进行思考和进餐,饥饿时便试图取其左.右最靠近 ...

  4. 在 C# 中,如何发现死锁并防止死锁

    在解释死锁如何发生以及如何阻止死锁的过程中,你似乎遇到了问题. 当两个( 最小二) 线程试图获取已经被另一个锁锁定的资源的锁时,就会发生死锁. 线程 1锁定资源 1尝试获取对资源 2的锁定. 同时,线 ...

  5. java 死锁 解决_Java死锁故障排除和解决

    java 死锁 解决 JavaOne年度会议的一大优点是主题专家介绍了几个技术和故障排除实验室. 这些实验室之一尤其引起了我的关注:Java冠军Heinz Kabutz提出的" HOL650 ...

  6. Oracle 制造死锁和查询死锁

    制造死锁 创造环境 create table t1_deadlock (a int); create table t2_deadlock (a int); insert into t1_deadloc ...

  7. 什么叫死锁?死锁案例?死锁必须满足哪些条件?如何定位死锁问题?有哪些解决死锁策略?哲学家问题?

    1.死锁是什么? 死锁一定发生在并发环境中,死锁是一种状态,当两个(或者多个线程)相互持有对方所需要的资源,却又都不主动释放手中持有的资源,导致大家都获取不到自己想要的资源,所有相关的线程无法继续执行 ...

  8. mysql加锁后怎么解除_Mysql查看死锁与解除死锁的深入讲解

    前言 前段时间遇到了一个Mysql 死锁相关的问题,整理一下. 问题描述:Mysql 的修改语句似乎都没有生效,同时使用Mysql GUI 工具编辑字段的值时会弹出异常. 什么是死锁 在解决Mysql ...

  9. 死锁的充分必要条件、死锁预防、死锁避免、死锁检测和解除

    2.19.2 死锁的条件 必要条件 互斥:一次只有一个进程可以使用一个资源 占有且等待:当进程等待其他资源时继续占有已有的资源 不可抢占:进程不能强行占有其他进程占有的进程 充分条件 循环等待:存在一 ...

  10. 死锁的处理策略—预防死锁、避免死锁、检测和解除死锁

    一.死锁的处理策略--预防死锁 (一)破坏互斥条件 互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁. 如果把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态.比如: SPOOLing ...

最新文章

  1. 软件项目管理重点总结
  2. python3 requests content和text 区别
  3. 线性代数知识点总结_考研数学线性代数部分怎样复习
  4. FPGA边沿检测Verilog实现(包含上升沿,下降沿,双边沿)
  5. 机器学习——支持向量机SVMpython实现
  6. NGINX生命周期-转
  7. jboss 4.3.0_JBoss BPM Suite 6.0.3版本的5个实用技巧
  8. 自适应简约数字动画404错误页面源码
  9. 信息——人类现代文明的奇迹
  10. Android使用SeekBar
  11. error LNK2019: unresolve d external symbol _DriverEntry@8 referenced in function _GsDriverEntry@8
  12. 未能写入输出文件拒绝访问
  13. VBoxGuestAdditions.iso下载
  14. BZOJ 4093: [Usaco2013 Dec]Vacation Planning
  15. MFC 多线程编程总结
  16. 从零开始掌握Python机器学习:七步教程 基础篇
  17. 【Visual Studio Code】中文乱码问题
  18. 第十六章: 请多一点
  19. ubuntu14.04+cuda8.0+cudnn5.1+torch7配置整理
  20. 三年级计算机课可以画的图有,三年级上册画画图片

热门文章

  1. 如何看待程序员的薪资倒挂现象
  2. java定义一个eat方法_小黄鸭系列java基础知识 | java中的方法
  3. Oracle等数据库报盘步骤(使用脚本批量压缩)
  4. 物联网---网络通信协议
  5. 微信扫码支付:此公众号并没有这些scope的权限,错误码:10005
  6. ubuntu pstack报错:Input/output error
  7. 偏移变色lisp_直线偏移联动 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  8. 获取指定日期所在月的最后一个工作日
  9. 分布式优化算法学习(一)
  10. 音乐信号音符/乐谱提取