首页 > 其他分享 >21 死锁

21 死锁

时间:2023-09-07 22:13:29浏览次数:32  
标签:21 synchronized Thread choice 死锁 new public


死锁,前提是资源唯一且被锁住 synchronized

package ThreadDemo;

// 死锁问题
public class Test21_DeadLock {
    public static void main(String[] args) {
        new Thread(new DeadLock(0),"a线程").start();
        new Thread(new DeadLock(1),"b线程").start();
    }
}

// A资源
class A{ }

// B 资源
class B{ }

// 死锁
class DeadLock implements Runnable{
    // 资源唯一才会引发死锁
    static A a=new A();
    static B b=new B();
    int choice;
    public DeadLock(int choice){
        this.choice=choice;
    }
    @Override
    public void run() {
        try {
            choice();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
    public void choice() throws InterruptedException {
        if (choice==0){
            synchronized (a){  // 先获得a,再获得b;等两个资源都拿到之后才释放
                System.out.println(Thread.currentThread().getName()+"获得了a资源");
                Thread.sleep(1000);  // 等待其他线程获得b,形成死锁
                synchronized (b){
                    System.out.println(Thread.currentThread().getName()+"获得了b资源");
                }
            }
        }else {
            synchronized (b){  // 先获得b,再获得a;等两个资源都拿到之后才释放
                System.out.println(Thread.currentThread().getName()+"获得了b资源");
                Thread.sleep(1000);  // 等待其他线程获得b,形成死锁
                synchronized (a){
                    System.out.println(Thread.currentThread().getName()+"获得了a资源");
                }
            }
        }
    }
}

标签:21,synchronized,Thread,choice,死锁,new,public
From: https://www.cnblogs.com/zhanjianhai/p/17686203.html

相关文章

  • 21 Linux 自带的LED驱动
    一、Linux自带LED驱动使能  其实Linux内核自带LED抢夺那个,但在此之前需要配置Linux驱动来使能LED驱动。  输入以下命令:cdlinux/atk-mpl/linux/my_linux/linux-5.4.31makemenuconfig  根据以下路径找到LED驱动:→DeviceDrivers→LEDSupport(NE......
  • 08:49:45,218 WARN JDBCExceptionReporter:71 - SQL Error: 156, SQLState: S1000 关
    昨晚运行以前的一个项目,在初始化数据的时候报:08:49:45,218 WARNJDBCExceptionReporter:71-SQLError:156,SQLState:S100008:49:45,218ERRORJDBCExceptionReporter:72-关键字'user'附近有语法错误。org.hibernate.exception.GenericJDBCException:couldnotexecute......
  • 21.守护进程和线程
    21.守护进程和线程学习目标说出守护进程的特点独立完成守护进程的创建独立实现多个线程的创建独立实现线程的退出和资源回收理解线程同步的思想1.守护进程1.1守护进程介绍Daemon(精灵)进程,是Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任......
  • P2215 [HAOI2007] 上升序列
    考虑一个长度为\(L\)的最长上升子序列\(P\),以它的第\(i\)个元素\(a_{x_i}\)开头的最长上升子序列长度至少为\(L-i+1\)。反之,若一个数满足以其开头的最长上升子序列长度至少为\(L-i+1\)则这个数必定可以作为\(P\)的第\(i\)个元素。所以我们可以先倒着跑一遍最长下降......
  • [ABC213G] Connectivity 2
    题目大意给你\(n\)点\(m\)边的图,问有多少种删边方法使得1与k仍然联通。\(1\len\le17,m\le\dfrac{n(n-1)}{2}\)解题思路看到\(n\le17\),显然是一道状压dp,但是\(m\le136\),显然不能枚举边。于是枚举点,显然的,有:连通图的数量=所有图的数量-非连通图的数量。所以......
  • 1521A - Nastia and Nearly Good Numbers
    A.NastiaandNearlyGoodNumbershttps://codeforces.com/problemset/problem/1521/A"""思路:1.就是普通的打印,NO的情况是只有b=1的时候才会出现,其他的都是YES,如果不想再继续分情况就把a*b放在中间做y,或者做x也可,避免(b-1)=1,最后要x+y=z"""forlinein[*open(0)......
  • 办公软件套件-office2021 win+mac版
    Office2021是由微软公司开发的一套全面的办公软件套件。作为全球最受欢迎的办公软件之一,Office2021提供了一系列强大的工具和功能,帮助用户在各种工作场景中高效地处理文档、数据、演示和电子邮件等任务。→→↓↓载Office2021mac/win 首先,Office2021包含了经典的文字处理......
  • IIS报错:HTTP 错误 500.21 – Internal Server Error,如何解决
      这一段时候,换了个新电脑,重新配置好IIS后,发现部署IIS上面的网站运行不了问题描述:HTTP错误500.21–InternalServerError处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler” 问题原因:没有注册asp.net4.......
  • day21 - 二叉树part07
    530. 二叉搜索树的最小绝对差详解/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):val(x),left......
  • [NOI2021] 庆典
    题目描述C国是一个繁荣昌盛的国家,它由\(n\)座城市和\(m\)条有向道路组成,城市从\(1\)到\(n\)编号。如果从\(x\)号城市出发,经过若干条道路后能到达\(y\)号城市,那么我们称\(x\)号城市可到达\(y\)号城市,记作\(x\Rightarrowy\)。C国的道路有一个特点:对于三座城市......