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

📄 philosopher.java

📁 用JAVA做的模拟电梯的程序,是自己做的
💻 JAVA
字号:
class Tool
{
	public boolean[] fork;
	private final int fork_amount = 5; 
	
	Tool()
	{
		fork = new boolean[fork_amount];	
		for(int i = 0; i < fork.length; i++)
		{
			fork[i] = true;
		}
	}
	
	public synchronized void get(int Philosopher_Number)
	{
		while((!fork[Philosopher_Number%fork_amount]) || (!fork[(Philosopher_Number + fork_amount - 1)%fork_amount]))
		{
			try
			{
				System.out.println("Philosopher"+Philosopher_Number+" 在等待两边的叉子可用。");
				this.wait();
			} 
			catch (InterruptedException e)
			{
			}
		}
		fork[Philosopher_Number%fork_amount] = false;
		fork[(Philosopher_Number + fork_amount - 1)%fork_amount] = false;	 
		System.out.println("Philosopher"+Philosopher_Number+" 两边的叉子可用,"+Philosopher_Number+"拿起两边的叉子开始吃饭了。"); 
	}
	
	public synchronized void put(int Philosopher_Number)
	{
		fork[Philosopher_Number%fork_amount] = true;
		fork[(Philosopher_Number + fork_amount - 1)%fork_amount] = true;
		System.out.println("Philosopher"+Philosopher_Number+" 吃完并放下叉子,这时候"+Philosopher_Number+"两边的叉子可以用了。"); 
		this.notify();
	}
	
}

class Philosopher extends Thread
{
	private int number;
	private Tool cha_zi;
	
	public Philosopher(int number, Tool cha_zi)
	{
		this.number = number;
		this.cha_zi = cha_zi;
	}

	public void run () 
	{
    	System.out.println("Philosopher"+number + " 肚子饿了。 "); 
    	cha_zi.get(number);
    	try
    	{
    		sleep(1000);
    	}
    	catch(InterruptedException e)
    	{
    	}  	
    	cha_zi.put(number);
    	System.out.println("Philosopher"+number + " 离开餐桌。");    	
	}
   
}

class Execute
{
	public static void main(String[] args)
	{
		Tool cha_zi = new Tool();
		
		new Philosopher(0, cha_zi).start();
		new Philosopher(1, cha_zi).start();
		new Philosopher(2, cha_zi).start();
		new Philosopher(3, cha_zi).start();
		new Philosopher(4, cha_zi).start();
	}
}

⌨️ 快捷键说明

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