60、死锁

死锁问题

在编写多线程代码时一定要注意避免死锁,发生死锁原因就是两个或多个线程都在等待对方释放锁导致,下面通过代码来演示一下死锁情况。

package com.sutaoyu.DeadThread;

public class DeadThread {
    private static Object obj1 = new Object();
    private static Object obj2 = new Object();
    
    public static void main(String[] args) {
        Thread t1 = new Thread() {
            public void run() {
                synchronized(obj1) {
                    System.out.println(this.getName() + "======obj1");
                    
                synchronized(obj2) {
                    System.out.println(this.getName() + "======obj2");
                }
                }
            }
        };
        
        Thread t2 = new Thread() {
            public void run() {
                synchronized(obj1) {
                    System.out.println(this.getName() + "======obj1");
                    
                synchronized(obj2) {
                    System.out.println(this.getName() + "======obj2");
                }
                }
            }
        };
        t1.start();
        t2.start();
    }
}

上面使用了同步代码嵌套来演示了死锁,实际开发中不仅是这种嵌套才会发生死锁,所以一定要注意避免。

猜你喜欢

转载自www.cnblogs.com/zhuifeng-mayi/p/10159976.html
60