首页 > 其他分享 >死锁和产生死锁的条件

死锁和产生死锁的条件

时间:2024-07-18 14:58:45浏览次数:15  
标签:Thread 产生 死锁 线程 资源 条件 o2 o1

死锁:

多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源的释放,由于线程被无限期地阻塞,因此程序不可能正常终止
下面展示一些 简单死锁代码实例

package com.haina.Thread61;

public class DeadLock {
    private Object o1=new Object();
    private Object o2=new Object();

    public void test1()  {
        synchronized (o1) {
            System.out.println("test1获取o1锁");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("test1尝试获取o2锁");
            synchronized (o2) {

            }
        }
    }
    public void test2() {
        synchronized (o2) {
            System.out.println("test2获取o2锁");
            try {
                Thread.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("test2尝试获取o1锁");
            synchronized (o1) {

            }
        }
    }

    public static void main(String[] args) {
        DeadLock deadLock=new DeadLock();
        Runnable r1=()-> deadLock.test1();
        Runnable r2=()-> deadLock.test2();
        Thread t1=new Thread(r1);
        Thread t2=new Thread(r2);
        t1.start();
        t2.start();
    }
}

这段代码会导致死锁情况发生。在test1()方法中,线程先获取o1锁,然后尝试获取o2锁;而在test2()方法中,线程先获取o2锁,然后尝试获取o1锁。因此,如果这两个方法同时执行,会出现互相等待对方释放锁的情况,导致程序无法继续执行下去,从而发生死锁。

产生死锁的条件:

  • 1.互斥使用,即当资源被一个线程使用时,别的线程不能使用
    2.不可抢占,资源请求者不能强制从资源占用者手中夺取资源,资源只能由
    资源占用者主动释放
    3.请求保持,即当资源请求者再请求其他资源同时保持对原有资源的占有
    4.循环等待,即存在一个等待队列:p1占有p2的资源,p2占有p3的资源, p3占有p1的资源。形成了一个等待环路。

标签:Thread,产生,死锁,线程,资源,条件,o2,o1
From: https://blog.csdn.net/dfghhhjj/article/details/140523090

相关文章

  • Mysql联合索引和索引条件下推
    1、概念介绍联合索引联合索引和聚集索引一样使用B+树结构存储,联合索引的索引节点存储多个键值对,按首列数值排序,叶子节点存放所有的索引值以及对应的主键,如果需要查询非联合索引中的字段需要进行回表查询。联合索引的大小小于聚集索引。索引覆盖InnoDB存储引擎支持覆盖索引(cov......
  • 关于centos 7安装binwalk的过程中产生的问题
    啊,kali机坏了,又安的centoso(╥﹏╥)o但是centos没有binwalk,它也不能像kali机一样之间install又在网上搜教程https://blog.csdn.net/qq_59344199/article/details/128022680第一步就出问题了再搜https://www.cnblogs.com/beimengRock/p/16026236.html#:~:text=在Linux下用sud......
  • 有较复杂限制条件的dp(CF366C,POJ1837,CF294B题解+总结)
    前言这篇文章将用三道精选的好题例题让你学会这种类型的题目。题型看起来是一个背包,但是多了一个条件,是一个等式或不等式,有时候式子还挺复杂的,该怎么办呢?例题1CF366CDimaandSalad题意原题有n......
  • Django多条件不定项查询
    在开发网站过程中遇到一个多条件查询,但并不要求全部填写的情况,如下图,可以只填name,也可以四个全部填好。 极端情况下四个字段都不填写,直接查询,此项目中这里不填默认为ALL,查数据库所有。如果使用if判断,每种情况写一个filter,需要15个判断语句。很麻烦,不美观,且代码可拓展性差。......
  • E9-控制移动建模应用页面中的提交按钮根据日期条件校验是否可提交
    背景在移动建模页面中提交表单时,有时需要根据表单上的日期字段校验是否满足提交条件,如果满足则可提交,如果不满足则不可提交本期以报餐管理场景为例:实现控制用户只能在指定的时间范围内提交报餐数据实现效果1、若当前时间不在指定的时间范围内,则提交失败;2、若当前时间在指......
  • 极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风
    全文链接:http://tecdat.cn/?p=24182最近我们被客户要求撰写关于极值理论的研究报告,包括一些图形和统计输出。本文用R编程语言极值理论(EVT)以确定10只股票指数的风险价值(和条件VaR)使用Anderson-Darling检验对10只股票的组合数据进行正态性检验,并使用BlockMaxima......
  • 条件断点 预编译头文件
    作用:当满足某些条件时才会触发断点怎么设置:代码左侧单击添加断点,右键条件,添加触发条件;就是说在条件断点处暂停运行;预编译头文件作用:抓取头文件,编译成二进制存放在文件中,可以避免多个文件包含相同头文件时多次编译读头文件注意:不能将经常改动的头文件放到预编译头文件中会......
  • 前端回流与重绘:概念及触发条件
    在前端开发中,性能优化是一个永恒的话题。回流(Reflow)与重绘(Repaint)是两个重要的概念,它们直接影响着页面的渲染性能和用户体验。本文将详细介绍回流与重绘的概念、触发条件及其优化方法。一、回流(Reflow)(重排)1.1概念回流,又称重排(Reflow),是指当DOM的变化引起元素的几何属性(如尺寸、......
  • 采购订单列表根据多条件设置单元格背景色
    文章目录采购订单列表根据多条件设置单元格背景色BOS配置空字符串需要单独处理测试采购订单列表根据多条件设置单元格背景色BOS配置空字符串需要单独处理如果值存在空字符串和空格,空格会标红,为空不会。因此单独针对空字符串标红。测试......
  • 会计检查收入时发现某些销售订单交完货没有自动产生收入凭证
    问题描述会计检查收入时发现某些销售订单交完货没有自动产生收入凭证原因分析:1、销售订单定价过程发生变化2、销售订单有不完整的记录没有维护3、销售订单行项目定价条件有丢失4、后台销售科目未配置5、其他解决方案:结合以上可能性,检查销售订单,交货单,发票检查发......