今天复习多线程的时候,在网上看到一段代码百思不得其解,望各位经过的学长学姐指点
疑问1、为什么都调用到bower.bowBack(this);就不往下执行了,都没有进入bowBack方法,什么条件造成的死锁?
疑问2、为什么输出语句System.out.format换成System.out.println就变成了重复执行者两个方法?反而不会造成死锁。
package cn.edu.jyu.secure;
public class DeadLock {
static class Friend {
private final String name;
Friend(String name) {
this.name = name;
}
String getName() {
return this.name;
}
synchronized void bow(Friend bower) {
System.out.format("%s: %s"
+ " has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
synchronized void bowBack(Friend bower) {
System.out.format("%s: %s"
+ " has bowed back to me!%n",
this.name, bower.getName());
bower.bow(this);
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(() -> alphonse.bow(gaston)).start();
new Thread(() -> gaston.bow(alphonse)).start();
}
}