哲学家就餐问题

有五位哲学家,围坐在圆桌旁。他们只做两件事,思考和吃饭,思考一会吃口饭,吃完饭后接着思考。吃饭时要用两根筷子吃,桌上共有 5 根筷子,每位哲学家左右手边各有一根筷子。如果筷子被身边的人拿着,自己就得等待。

class Chopstick extends ReentrantLock {
	 String name;
	 public Chopstick(String name) {
		 this.name = name;
	 }
	 @Override
	 public String toString() {
		 return "筷子{" + name + '}';
	 }
}
class Philosopher extends Thread {
	 Chopstick left;
	 Chopstick right;
	 public Philosopher(String name, Chopstick left, Chopstick right) {
		 super(name);
		 this.left = left;
		 this.right = right;
	 }
	 @Override
	 public void run() {
		 while (true) {
			 // 尝试获得左手筷子
			 if (left.tryLock()) {
				 try {
				 	// 尝试获得右手筷子
					 if (right.tryLock()) {
						 try {
							 eat();
						 } finally {
							 right.unlock();
						 }
				 }
				 } finally {
					 left.unlock();
				 }
			 }
		 }
	 }
	 private void eat() {
		 log.debug("eating...");
		 Sleeper.sleep(1);
	 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值