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

📄 elevatorthread.java

📁 用java实现的多电梯调度程序
💻 JAVA
字号:

//import java.io.*;
import java.util.*;

public class ElevatorThread extends  Thread{
	int curPos = 1;
	boolean direction = true; //方向, 上--true;   下----false
	boolean status = false; //电梯的状态, true -----正在运行, false----等待prey.
	private TubePanel tubePanel;
	int threadID;
	TreeSet destSet = new TreeSet();	
	public ElevatorThread( TubePanel p){
		tubePanel = p;
		start();
	}
	public void setThreadID( int i ){
		threadID  = i;
	}
	public synchronized void addDest( int dest ){
		destSet.add(new Integer(dest));
	}
	public synchronized void addDestNotify( int dest ){
		destSet.add(new Integer( dest ));
		this.notify();
		
	}
	public  void run(){
		while( true){
			status = false;
			try{
				synchronized ( this ){
					wait();
				}
				status = true;	
				System.out.println("Thread " + threadID + " begin to run");
				while( !destSet.isEmpty() ){
					Integer integer = (Integer)destSet.first();
					int dest = (integer).intValue();
					System.out.println("dest is " + dest);
					tubePanel.closeDoor();
					//电梯关门 , 开始向一个目的楼层行进
					while( curPos != dest ){
						if( curPos < dest ){
							  curPos ++;
							  direction = true; 
							  tubePanel.setCurFloor(curPos);
					    }else  {
					    	    curPos --;
					    	    direction = false;
							    tubePanel.setCurFloor(curPos);
					    	    
					    } 
						System.out.println("Thread " + threadID + " now at " + curPos );
						sleep(500);
						integer = (Integer)destSet.first();
						dest = (integer).intValue();
					}
					//电梯开门, 一个目标楼层已到达
					System.out.println("Thread " + threadID + " arrive at " + curPos + " Floor" );
					destSet.remove(integer);
					tubePanel.openDoor();
					sleep(2000);
				}
				tubePanel.allUnload();
				//如果所有的目的楼层都经过了, 则电梯的状态为全部卸载
				status = false;
			}catch( InterruptedException e){
					e.printStackTrace();
			}
			
		}
	}
	
}

⌨️ 快捷键说明

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