package java_learning;
//An example of deadlock.
class A1 {
synchronized void foo(B1 b) {
String name = Thread.currentThread().getName();
System.out.println(name + " entered A1.foo");
try {
Thread.sleep(1000);
} catch(Exception e) {
System.out.println("A1 Interrupted");
}
System.out.println(name + " trying to call B1.last()");
b.last();//调用对象b的同步方法
}
synchronized void last() {
System.out.println("Inside A1.last");
}
}
class B1 {
synchronized void bar(A1 a) {
String name = Thread.currentThread().getName();
System.out.println(name + " entered B1.bar");
try {
Thread.sleep(1000);
} catch(Exception e) {
System.out.println("B1 Interrupted");
}
System.out.println(name + " trying to call A1.last()");
a.last();//调用对象a的方法
}
synchronized void last() {
System.out.println("Inside A1.last");
}
}
public class Deadlock implements Runnable {
A1 a = new A1();
B1 b = new B1();
Deadlock() {
Thread.currentThread().setName("MainThread");
Thread t = new Thread(this, "RacingThread");
t.start();
a.foo(b); // get lock on a in this thread.进入对象a的管程,试图调用对象b的方法
System.out.println("B1ack in main thread");
}
public void run() {
b.bar(a); // get lock on b in other thread.进入对象b的管程,试图调用对象a的方法
System.out.println("Back in other thread");
}
public static void main(String args[]) {
new Deadlock();
}
}
Deadlock
最新推荐文章于 2023-01-27 21:04:32 发布