package 线程死锁; public class Lock { static Object lock1 = new Object(); static Object lock2 = new Object(); }
package 线程死锁; public class Dielock implements Runnable{ private boolean flag; @Override public void run() { if(flag) { synchronized(Lock.lock1) { System.out.println("线程1拿到第一把锁"); synchronized (Lock.lock2) { System.out.println("线程1要拿第二把锁"); } } }else { synchronized (Lock.lock2) { System.out.println("线程2拿到第2把锁"); synchronized (Lock.lock1) { System.out.println("线程2要拿第1把锁"); } } } } /** * 线程开发的时候避免出现死锁 * @param flag */ public Dielock(boolean flag) { super(); this.flag = flag; } }
package 线程死锁; public class DieLockTest { public static void main(String[] args) { Dielock di1 = new Dielock(true); Dielock di2 = new Dielock(false); Thread t1 = new Thread(di1); Thread t2 = new Thread(di2); t1.start(); t2.start(); } }