线程死锁的原因:
同步中嵌套同步,但是锁却不同
死锁演示(DeadLockDemo):
class Test implements Runnable { private boolean flag; //构造函数中传入标记的值,用来操作run方法中的if else循环 Test(boolean flag) { this.flag = flag; } public void run() { if(flag) { while(true) { synchronized(MyLock.lockA) { System.out.println(Thread.currentThread().getName()+"...if lockA "); synchronized(MyLock.lockB) { System.out.println(Thread.currentThread().getName()+"..if lockB"); } } } } else { while(true) { synchronized(MyLock.lockB) { System.out.println(Thread.currentThread().getName()+"..else lockB"); synchronized(MyLock.lockA) { System.out.println(Thread.currentThread().getName()+".....else lockA"); } } } } } } //放置了两个锁 class MyLock { static Object lockA = new Object(); static Object lockB = new Object(); } class DeadLockTest { public static void main(String[] args) { //传入true使其在if循环中 Thread t1 = new Thread(new Test(true)); //传入false使其在if循环中 Thread t2 = new Thread(new Test(false)); t1.start(); t2.start(); } }