java中的死锁举例
public class TestDeadLock {
public static void main(String[] args) {
A a = new A();
B b = new B();
new Thread("线程A") {
@Override
public void run() {
a.first(b);
}
}.start();
new Thread(() -> {
b.first(a);
}, "线程B").start();
}
}
class A {
public synchronized void first(B b) {
System.out.println(Thread.currentThread().getName() + "执行类A的first方法...........");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
b.last();
}
public synchronized void last() {
System.out.println(Thread.currentThread().getName() + "执行类A的last方法...........");
}
}
class B {
public synchronized void first(A a) {
System.out.println(Thread.currentThread().getName() + "执行类B的first方法...........");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
a.last();
}
public synchronized void last() {
System.out.println(Thread.currentThread().getName() + "执行类B的last方法...........");
}
}