⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rousseau.java

📁 操作系统课程信号量机制实验(哲学家吃乳猪)
💻 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 + -