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

📄 philosopher.java

📁 Java样例程序集合:2D
💻 JAVA
字号:
import java.util.Random;import java.awt.*;import javax.swing.JLabel;import javax.swing.ImageIcon;import javax.swing.SwingUtilities;public class Philosopher extends JLabel implements Runnable {    private Chopstick leftStick, rightStick;    private boolean sated;    private DiningPhilosophers parent;    private int position;		private Dukes currentIcon;		private String currentText;    Thread philThread = null;    public Philosopher(DiningPhilosophers parent, int position) {			super(parent.names[position], parent.imgs.get(Dukes.HUNGRYDUKE), JLabel.CENTER);			this.parent = parent;			this.position = position;			setVerticalTextPosition(JLabel.BOTTOM);			setHorizontalTextPosition(JLabel.CENTER);			// Identify the chopsticks to my right and left			this.rightStick = parent.chopsticks[position];			if (position == 0) {				this.leftStick = parent.chopsticks[parent.NUMPHILS-1];			} else {				this.leftStick = parent.chopsticks[position-1];			}			// I'm hungry			this.sated = false;			philThread = new Thread(this);	}    public void run() {			try {				while (true) {						Thread.sleep((int)(Math.random() * parent.grabDelay));						rightStick.grab();						currentIcon = Dukes.RIGHTSPOONDUKE;						currentText = "     ";						try {							updatePhilosopher();						} catch (Exception e) {							break;						}						Thread.sleep((int)(Math.random() * parent.grabDelay));						leftStick.grab();						currentIcon = Dukes.BOTHSPOONSDUKE;						try {							updatePhilosopher();						} catch (Exception e) {							break;						}												Thread.sleep((int)(Math.random() * parent.grabDelay));						rightStick.release();						leftStick.release();						currentIcon = Dukes.HUNGRYDUKE;						currentText = "Good!";						try {							updatePhilosopher();						} catch (Exception e) {							break;						}						sated = true;						Thread.sleep((int)(Math.random() * parent.grabDelay * 4));						sated = false;				}			} catch (java.lang.InterruptedException e) {			}			leftStick.releaseIfMine();			rightStick.releaseIfMine();						currentIcon = Dukes.HUNGRYDUKE;			currentText = parent.names[position];			try {				updatePhilosopher();			} catch (Exception e) {				System.err.println("Couldn't update icon for " + position);			}			sated = false;			philThread = new Thread(this);    }		    void updatePhilosopher() throws Exception {			Runnable changeThePhilosopher = new Runnable() {				public void run() {						setText(currentText);						setIcon(parent.imgs.get(currentIcon));				}			};			SwingUtilities.invokeAndWait(changeThePhilosopher);    } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -