package cn.bruce.Thread; public class LockDemo { public final static void main(String[] args) { // 创建线程任务类对象 DeadLock DL = new DeadLock(); // 创建两个线程 Thread t0 = new Thread(DL); Thread t1 = new Thread(DL); // 启动线程 t0.start(); t1.start(); } } // 定义锁对象类 class Locka { private Locka() { } //定义唯一对象 public static final Locka LOCKA = new Locka(); } // 定义锁对象类 class Lockb { private Lockb() { } //定义唯一对象 public static final Lockb LOCKB = new Lockb(); } // 定义线程任务类 class DeadLock implements Runnable { private int i; @Override public void run() { while (true) { if (i % 2 == 0) {// 先进入A同步,再进入B同步 synchronized (Locka.LOCKA) { System.out.println("if...Locka"); synchronized (Lockb.LOCKB) { System.out.println("if...Lockb"); } } } else {// 先进入B同步,再进入A同步 synchronized (Lockb.LOCKB) { System.out.println("else...Lockb"); synchronized (Locka.LOCKA) { System.out.println("else...Locka"); } } } i++; } } }
由上图可见,程序是没结束的,只是卡死了,正常情况应该是一组一组交替出现if和else ,当不是一对一对出现时,就会发生死锁了。