【发布时间】:2014-11-25 12:21:20
【问题描述】:
我试图从 Oracle 的网站 deadlock 了解 deadlock,但不确定两个自定义线程为何以及何时进入死锁状态。
package com.geekthread.java.threads;
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");
//holds lock for alphonse
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
//holds lock for gastone
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
}
}
}
请纠正我对上述程序的理解:-
1.) 为 alphonse 持有锁
new Thread(new Runnable() {
public void run() { alphonse.bow(gaston); }
}).start();
2.) 锁住gastone
new Thread(new Runnable() {
public void run() { gaston.bow(alphonse); }
}).start();
我试图从没有以死锁情况结束的弓形程序中删除同步关键字,即程序执行完成并且程序在执行后终止。
谢谢
【问题讨论】:
标签: concurrency deadlock