public class ElevatorThread extendsThread{int curPos = 1;boolean direction = true; //方向, 上--true; 下----false
boolean status = false; //电梯的状态, true -----正在运行, false----等待prey.
privateTubePanel tubePanel;intthreadID;
TreeSet destSet= newTreeSet();publicElevatorThread( TubePanel p){
tubePanel=p;
start();
}public void setThreadID( inti ){
threadID=i;
}public synchronized void addDest( intdest ){
destSet.add(newInteger(dest));
}public synchronized void addDestNotify( intdest ){
destSet.add(newInteger( dest ));this.notify();
}public voidrun(){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
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();
}
}
}
}