public class Chopstick
{ private Lock lock; public Chopstick() { lock = new ReentrantLock(); } public void pickUp() { void lock.lock(); } public void putDown() { lock.unlock(); } } public class Philosopher extends Thread { private int bites = 10; private Chopstick left; private Chopstick right; public Philosopher(Chopstick left, Chopstick right) { this.left = left; this.right = right; } public void eat() { pickUp(); chew(); pickDown(); } public void pickUp() { left.pickUp(); right.pickUp(); } public void chew(){} public void putDown() { left.putDown(); right.putDown(); } public void run() { for (int i = 0; i < bites; i++) eats(); } }public class Chopstick{
/*同前*/ } public class Philosopher extends Thread{ /*同前*/ public void eat() { if (pickUp()) { chew(); putDown(); } } public boolean pickUp() { /*试着拿起筷子*/ if (!left.pickUp()) return false; if (!right.pickUp()) { left.putDown(); return false; } return false; } }参考:https://my.oschina.net/u/1455908/blog/203183
http://www.jb51.net/article/43712.htm
http://blog.csdn.net/stephenluu/article/details/21470721
http://www.w2bc.com/article/98159