首页 > 编程语言 >Java死锁

Java死锁

时间:2022-09-26 00:00:07浏览次数:53  
标签:Java synchronized Object HAIR 死锁 线程 new

public class DeadLockDemo {

    private static final Object HAIR_A = new Object();
    private static final Object HAIR_B = new Object();

    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (HAIR_A) {
                try {
                    Thread.sleep(50L);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                synchronized (HAIR_B) {
                    System.out.println("A成功的抓住了B的头发");
                }
            }
        }).start();

        new Thread(() -> {
            synchronized (HAIR_B) {
                synchronized (HAIR_A) {
                    System.out.println("B成功抓住了A的头发");
                }
            }
        }).start();
    }
}

当我们不休眠那50毫秒,则死锁的情况不是100%发生,我们休眠那50毫秒之后

  • 第一个线程先锁了HAIR_A,然后休眠50毫秒
  • 此时第二个线程执行了,他拿到了HAIR_B,要去拿HAIR_A的时候发现拿不到
  • 这时第一个线程休眠结束,当他要拿HAIR_B时,发现HAIR_B也拿不到

这个时候这两个线程一个等HAIR_A释放,一个等HAIR_B释放,进入了死锁状态

标签:Java,synchronized,Object,HAIR,死锁,线程,new
From: https://www.cnblogs.com/jarico/p/16729465.html

相关文章

  • java 枚举的使用
    一、枚举的介绍,以如下的枚举为例子进行介绍enumSize{Small,Medium,Large,ExtraLarge;}如上的声明定义了一个类,它有4个实例不可能再构造出新的对象,即:Sizesi......
  • JadConfig 注解驱动的java 配置管理包
    JadConfig是graylog开源的一个基于注解驱动的java配置管理包,graylogserver对于配置的管理就是使用了此包JadConfig使用比较简单,但是功能还是很强大的,配置包含了校......
  • java入门:Hello,World
    卸载卸载JDK删除java的安装目录删除JAVAHOME删除path下关于java的目录java-version安装JDK百度搜索JDK8,找到下载地址同意协议下载电脑对应的版......
  • Java的结构
    顺序结构Java基本结构就是顺序结构,除非特别指明,否则依次执行顺序结构是最简单的算法结构packagecom.tea.struct;​publicclassShunXuDemo01{  publicsta......
  • javaScript-2 字符串处理
    字符串处理字符串处理<!DOCTYPEhtml><html><head><title>字符串处理</title></head><body><h1>字符串处理</h1>原始字符串:<spanid="orig......
  • 零钱通项目(java)
    1.项目需求说明使用Java开发零钱通项目,可以完成收益入账,消费,查看明细,退出系统等功能。2.项目的界面化繁为简先完成显示菜单,并可以选择完成零钱通明细.......
  • Java基础语法 三元运算符
    格式优先级packageBasicGrammar.day03;/*运算符之五:位运算符(了解)结论:1.位运算符操作的都是整型的数据2.<<:在一定范围内,每向左移1位,相当于*2>>:在一......
  • Java三大特性
    三大特性面向对象三大特性:封装、继承、多态封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问继承:......
  • Java基础语法 位运算符
    定义结论:1.位运算符操作的都是整型的数据2.<<:在一定范围内,每向左移1位,相当于*23.>>:在一定范围内,每向右移1位,相当于/2packageBasicGrammar.day03;/*运算符......
  • Java8Stream流
    Stream流呢,以前我也有所了解,像一些面试题中也出现过,Java8的新特性,有一块就是这个Stream操作集合,而且在看一些项目中也使用的比较多。但总感觉自己学的一知半解,所以今天打......