品易云推流 关闭
文章 > java基础 > Java避免死锁的处理方法

Java避免死锁的处理方法

头像

小妮浅浅

2021-04-28 16:56:49541浏览 · 0收藏 · 0评论

1、处理方法

破坏互斥条件:这个条件不能破坏,锁的作用是互斥。

破坏要求和维护条件:一次性申请所有资源。

破坏循环等待条件:按顺序申请资源。

破坏不剥夺条件:当线程无法申请所需资源时,主动放弃所持资源。

2、实例

class DeadLockDemo {
    private static Object resource1 = new Object();
    private static Object resource2 = new Object();
 
    public static void main(String[] args) {
        new Thread(() -> {
            synchronized (resource1) {
                System.out.println(Thread.currentThread() + "get resource1");
                try {
                    Thread.sleep(1000);   //线程休眠,保证线程2先获得资源2
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread() + "waiting get resource2");
                synchronized (resource2) {
                    System.out.println(Thread.currentThread() + "get resource2");
                }
            }
        }, "线程 1").start();
 
        new Thread(() -> {
            synchronized (resource2) {
                System.out.println(Thread.currentThread() + "get resource2");
                try {
                    Thread.sleep(1000); //线程休眠,保证线程1先获得资源1
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread() + "waiting get resource1");
                synchronized (resource1) {
                    System.out.println(Thread.currentThread() + "get resource1");
                }
            }
        }, "线程 2").start();
    }
}

以上就是Java避免死锁的处理方法,希望对大家有所帮助。更多Java学习指路:Java基础

关注公众号

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

底部广告图 底部广告图按钮