死锁
例子
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();
    }
}
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号