死锁终结者:顺序锁和轮询锁!(3)

简介: 死锁终结者:顺序锁和轮询锁!(3)

顺序锁的实现代码如下所示:


publicclass SolveDeadLockExample {
    public static void main(String[] args) {
        Object lockA = new Object(); // 创建锁 A
        Object lockB = new Object(); // 创建锁 B
        // 创建线程 1
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lockA) {
                    System.out.println("线程 1:获取到锁 A!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("线程 1:等待获取 B...");
                    synchronized (lockB) {
                        System.out.println("线程 1:获取到锁 B!");
                    }
                }
            }
        });
        t1.start(); // 运行线程
        // 创建线程 2
        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lockA) {
                    System.out.println("线程 2:获取到锁 A!");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("线程 2:等待获取B...");
                    synchronized (lockB) {
                        System.out.println("线程 2:获取到锁 B!");
                    }
                }
            }
        });
        t2.start(); // 运行线程
    }
}


以上程序的执行结果如下:


微信图片_20220120214254.jpg


从上述执行结果可以看出,程序并没有出现死锁的问题。

相关文章
|
监控 测试技术 持续交付
|
机器学习/深度学习 自然语言处理 前端开发
国产开源Sora,视频生成CogVideoX再开源!更大尺寸,更高质量!
CogVideoX 又双叒叕开源啦!这次开源了更大尺寸!看看和之前有什么区别吧?
|
存储 安全 定位技术
OAuth:理解与应用
【8月更文挑战第22天】
186 0
|
开发者
软件设计与架构复杂度问题之注释在软件设计中的角色如何解决
软件设计与架构复杂度问题之注释在软件设计中的角色如何解决
|
文件存储 uml
【UML建模】(8) UML建模之组件图
组件图是用来描述组件与组件之间关系的一种UML图,组件图在宏观层面上显示了构成系统某一特定方面的实现结构。它是一种结构型图表。
1527 0
【UML建模】(8) UML建模之组件图
|
数据采集 JavaScript 计算机视觉
正则什么的,你让我写,我会难受,你让我用,真香!
正则什么的,你让我写,我会难受,你让我用,真香!
|
缓存 自然语言处理 Java
PHP的内部机制有哪些?底层原理是什么?
PHP的内部机制有哪些?底层原理是什么?
184 0
|
Python
用Python画图,缓解乏味的学习.....(下)
用Python画图,缓解乏味的学习.....
182 0
用Python画图,缓解乏味的学习.....(下)
【Groovy】MOP 元对象协议与元编程 ( GroovyObject 接口简介 | MetaClass 简介 | 使用 GroovyObject#invokeMethod 执行类方法 )
【Groovy】MOP 元对象协议与元编程 ( GroovyObject 接口简介 | MetaClass 简介 | 使用 GroovyObject#invokeMethod 执行类方法 )
340 0
|
算法 BI 开发者
笔试算法模拟题精解之“Codancer的数组封印”
我们逆向思考,对于给定的数组每次删去一个数,相邻两次操作的答案不会超过1。
笔试算法模拟题精解之“Codancer的数组封印”