首页 > 其他分享 >死锁演示代码

死锁演示代码

时间:2022-09-27 14:12:00浏览次数:55  
标签:演示 Thread synchronized 代码 Object System 死锁 getName

死锁演示代码

死锁的四个必要条件

  • 互斥条件:一个资源每次只可以被一个进程使用
  • 请求与保持:一个进程因请求资源而阻塞时,对已获得的资源保持不放
  • 不剥夺条件:进程已经获得的资源,在未使用完成之前,不可以强行剥夺
  • 循环等待条件:若干进程之间行程了一种头尾相接的循环等待资源关系
package com.yishan.patterns.juc.deadLock;

import java.util.concurrent.TimeUnit;

/**
 * 死锁演示
 */
public class Demo {

    static Object a = new Object();
    static Object b = new Object();

    public static void main(String[] args) {

        new Thread(() -> {
            synchronized (a) {
                System.out.println(Thread.currentThread().getName() + "持有a,试图获取b");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (b) {
                    System.out.println(Thread.currentThread().getName() + "获取到b");
                }
            }
        }, "a").start();

        new Thread(() -> {
            synchronized (b) {
                System.out.println(Thread.currentThread().getName() + "持有b,试图获取a");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (a) {
                    System.out.println(Thread.currentThread().getName() + "获取到a");
                }
            }
        }, "b").start();
    }


}

标签:演示,Thread,synchronized,代码,Object,System,死锁,getName
From: https://www.cnblogs.com/yishan99/p/16734357.html

相关文章

  • 技术分享 | 代码覆盖率集成
    本文节选自霍格沃兹测试开发学社内部教材JaCoCo,即JavaCodeCoverageLibrary,它由EclEmma团队根据多年来使用和集成现有库的经验教训而创建的一个开源的代码覆盖率工......
  • 线程打断(interrupt)状态演示
    packagecn.yds.juc.learning;importlombok.extern.slf4j.Slf4j;/***@authoryds*@Date2022/9/2119:25*@DescriptionThreadDemo4*@Version1.0.0*/......
  • git 查看某一行代码的修改历史
    查看某行代码谁写的:gitblamefile_namegitblame-L58,100file_name#58~100行代码其输出格式为:commit_ID|代码提交作者|提交时间|代码位于文件中的行数......
  • git如何将远程仓库代码拉下覆盖本地仓库
    git将远程仓库代码拉下覆盖本地仓库记录,在最近代码学习过程中,自己手动改了一下代码,但是忘记修改了哪些,现在想恢复到和远程仓库代码一致。使用如下三条命令搞定:1.gitfet......
  • git 查看代码是谁提交的
    目录git查看代码是谁提交的用idea查看git查看代码是谁提交的有很多种方法,比如登陆gitlab查看,或者在本地查看等用idea查看当我们拉取代码后,本地代码或者脚本无法定位......
  • 云图说丨华为云代码托管服务分支合并大作战
    摘要:华为云CodeHub代码托管服务支持多分支开发,并为分支合并建立了可配置的审核规则,下面用一张图带您了解华为云CodeHub代码托管服务分支合并流程。本文分享自华为云社区《......
  • Java Stream常用代码
    //过滤数据List<TestVo>list=list.stream().filter(x->NumberUtil.isLessOrEqual(x.getPrice(),testVo.getPrice())).collect(Collectors.toLis......
  • MybatisPlus学习之MyBatisX插件比代码生成器还好用的哦2
    概述  https://blog.csdn.net/qq_39746820/article/details/124339612MyBatis-Plus为我们提供了强大的mapper和service模板,能够大大的提高开发效率但是在真正开发过程中,M......
  • mybatisplus 代码生成器
    pom.xml<!--mybitsplus启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</......
  • MybatisPlus学习之MyBatisX插件比代码生成器还好用的哦
    一、MyBatisX的作用:1.xml跳转2.生成代码3.重置代码4.JAP提示跟代码生成器比较:代码生成器生成文件还有controller等文件,而mybatsx没有三、如何使用:1.安装MyBatisX:安装方......