public class Deadlock {
static class Friend {
private final String name;
public Friend(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public synchronized void bow(Friend bower) {
System.out.format("%s: %s"
+ " has bowed to me!%n",
this.name, bower.getName());
bower.bowBack(this);
}
public synchronized void bowBack(Friend bower) {
System.out.format("%s: %s"
+ " has bowed back to me!%n",
this.name, bower.getName());
}
}
public static void main(String[] args) {
final Friend alphonse =
new Friend("Alphonse");
final Friend gaston =
new Friend("Gaston");
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
}
/*
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
*/
在上面的代码
,我们通过创建一个匿名类的匿名对象创建new Thread
(Runnable接口的子类?)Mutithreading和匿名类和对象
但是当我们通过这新的Runnable
对象,它有它自己运行()方法重载。所以*新的线程对象仍然没有它的run()方法重载。*由调用新线程(....)。start是到仍然没有被覆盖的线程的run()! 我错了,导致此代码工作
可能是一个计时问题。你的线程太快而死锁。对同步方法进行长时间的睡眠以强制死锁。 – Thilo
我坚信你让我mate.this代码工作,,我想问的是它是如何工作的! – user2837260
我们从来没有定义Thread对象的run()方法,但它的工作原理。 – user2837260