一个线程锁定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;
}
}