public classTest {public static voidmain(String[] args) {
DeadlockRisk dead= newDeadlockRisk();
MyThread t1= new MyThread(dead, 1, 2);
MyThread t2= new MyThread(dead, 3, 4);
MyThread t3= new MyThread(dead, 5, 6);
MyThread t4= new MyThread(dead, 7, 8);
t1.start();
t2.start();
t3.start();
t4.start();
}
}classMyThread extends Thread {privateDeadlockRisk dead;private inta, b;
MyThread(DeadlockRisk dead,int a, intb) {this.dead =dead;this.a =a;this.b =b;
}
@Overridepublic voidrun() {
dead.read();
dead.write(a, b);
}
}classDeadlockRisk {private static classResource {public intvalue;
}private Resource resourceA = newResource();private Resource resourceB = newResource();public intread() {
synchronized (resourceA) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceB) {
System.out.println("read():" + Thread.currentThread().getName() + "获取了resourceB的锁!");return resourceB.value +resourceA.value;
}
}
}public void write(int a, intb) {
synchronized (resourceB) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceA的锁!");
synchronized (resourceA) {
System.out.println("write():" + Thread.currentThread().getName() + "获取了resourceB的锁!");
resourceA.value=a;
resourceB.value=b;
}
}
}
}