一个线程锁定A,等着B,一个线程锁定B,等着A
过多的同步方法会导致死锁
package Tread; public class Demo02 { public static void main(String[] args) { Object g = new Object(); Object m = new Object(); Test t1 = new Test(g, m); Test t2 = new Test(g, m); new Thread(t1).start(); new Thread(t2).start(); } } class Test implements Runnable { Object goods; Object money; public void run() { while(true) { test(); } } public void test() { synchronized (goods) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (money) { } } System.out.println("一手给钱"); } public Test(Object goods, Object money) { super(); this.goods = goods; this.money = money; } } class Test2 implements Runnable { Object goods; Object money; public void run() { while (true) { test(); } } public void test() { synchronized (money) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (goods) { } } System.out.println("一手给货"); } public Test2(Object goods, Object money) { super(); this.goods = goods; this.money = money; } }