最简单的死锁示例

最简单的死锁示例

public class DeadLockDemo {
     
    public void method1() {
     
        synchronized (String.class) {
     
            System.out.println("method1 lock1……");
            synchronized (Integer.class) {
     
                System.out.println("method1 lock2……");
            }
        }
    }

    public void method2() {
     
        synchronized (Integer.class) {
     
            System.out.println("method2 lock1……");
            synchronized (String.class) {
     
                System.out.println("method2 lock2……");
            }
        }
    }
}

如何避免死锁

造成死锁的原因并不是由于多个线程引起的,而是它们请求锁的顺序。如果提供有序的请求锁顺序,则问题得到解决。只要将上述代码进行简单修改,就不会产生死锁。

public class DeadLockDemo {
     
    public void method1() {
     
        synchronized (String.class) {
     
            System.out.println("method1 lock1……");
            synchronized (Integer.class) {
     
                System.out.println("method1 lock2……");
            }
        }
    }

    public void method2() {
     
        synchronized (String.class) {
     
            System.out.println("method2 lock1……");
            synchronized (Integer.class) {
     
                System.out.println("method2 lock2……");
            }
        }
    }
}

你可能感兴趣的:(多线程)