📄 rousseau.java
字号:
package experiment1;
/**
* <p>哲学家</p>
* @author lindy
*/
public class Rousseau extends Thread {
private Chopsticks left; //左边的筷子
private Chopsticks right; //右边的筷子
private int philo_num; //哲学家的序号
private int eaten_total; //哲学家吃的乳猪块数
private Porket porket; //乳猪
/**
* <p>构造函数,初始化</p>
* @param Rousseau_no 哲学家序号
* @param left_chopstick 左边筷子
* @param right_chopstick 右边筷子
* @param porkets 被吃的乳猪
*/
public Rousseau(int Rousseau_no
, Chopsticks left_chopstick
, Chopsticks right_chopstick
, Porket porkets) {
philo_num = Rousseau_no;
left = left_chopstick;
right = right_chopstick;
eaten_total = 0;
porket = porkets;
}
/**
* 吃乳猪
*/
public void run() {
while (true) {
try { //先思考
Thread.sleep((long)
(1000*Math.random()));
} catch (InterruptedException ex) {
ex.printStackTrace();
}
if (left.takeup() && right.takeup()) {
//拿起两边的筷子
if (porket.Decreace()) {
//吃一块乳猪
eaten_total++;//乳猪数加一
//吃完放下筷子
left.putdown();//放下左边的筷子
right.putdown();//放下右边的筷子
System.out.println("哲学家"
+ philo_num
+ "吃了一块乳猪现在正在思考。。");
try { //思考
Thread.sleep((long)
(5000*Math.random()));
} catch(InterruptedException ex) {
ex.printStackTrace();
}
} else {
// 乳猪已经吃完了放下手里的筷子
left.putdown();
right.putdown();
break;
}
} else {
//不能同时拿到两只筷子,全部放回,思考
left.putdown();
right.putdown();
System.out.println("哲学家"
+ philo_num
+ "在等待。。");
}
}
//吃完乳猪
System.out.println("哲学家"
+ philo_num
+ "一 共吃了 "
+ eaten_total
+ " 块乳猪!!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -