死锁经典案例:哲学家就餐。
这个案例会导致死锁。
通过修改《Java编程思想4》一书中的案例,来做实验,代码更易理解,结果也相对容易控制。
附代码:
筷子类:
package com.tyxh.ch21.c6;
public class Chopstick {
private boolean taken = false;//判断是此筷子是否被拿起
public synchronized void take() throws InterruptedException {
while(taken) {
//如果已被拿起,则等待
wait();
}
//如果没有被拿起,则可以被拿起,并设置taken为true
taken = true;
}
public synchronized void drop() {
//放下筷子之后设置taken为false,并通知其他筷子
taken = false;
notifyAll();
}
}
哲学家类:
package com.tyxh.ch21.c6;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class Philosopher implements Runnable {
private Chopstick left;//左筷子
private Chopstick right;//右筷子