死锁

例子

package com.test.demo;

/**
 * Created by admin on 2017/6/12 10:00.
 */
public class DemoThread implements Runnable {
    /**
     * 被锁的对象要是同一个对象,即被 static 修饰,
     * 全局共享对象,不然多线程中 object1,object2 new出来的不是同一对象
     */
    static Object object1 = new Object();
    static Object object2 = new Object();
    boolean flag;

    DemoThread(boolean flag) {
        this.flag = flag;
    }

    @Override
    public void run() {
        if (flag) {
            synchronized (object1) {
                System.out.println("if object1 adress:" + Integer.toHexString(object1.hashCode()));
                synchronized (object2) {
                    System.out.println("if object2 adress:" + Integer.toHexString(object2.hashCode()));
                }
            }
        } else {
            synchronized (object2) {
                System.out.println("else object2 adress:" + Integer.toHexString(object2.hashCode()));
                synchronized (object1) {
                    System.out.println("else object1 adress:" + Integer.toHexString(object1.hashCode()));
                }
            }
        }
    }

    public static void main(String[] args) {
        Thread t1 = new Thread(new DemoThread(true));
        Thread t2 = new Thread(new DemoThread(false));
        t1.start();
        try {
            Thread.sleep(5);
        } catch (Exception e) {

        }
        t2.start();
    }

}

 

原文地址:https://www.cnblogs.com/skyessay/p/6991609.html