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

📄 lift.java

📁 利用java的线程来模拟电梯的调度。主要来实践操作系统课程的知识。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				if(id == l){
					if(t==1){
						downTasks.remove(i);
					}
					if(t==2){
						temp.setTyep(0);
					}
					return true;
				}
			}
			for(int i=0;i<outdown.size();i++){
				Task temp = (Task)outdown.get(i);
				int t = temp.getType();
				int l = temp.getTask();
				if( id == l){
					if(t==1){
						outdown.remove(i);
					}
					if(t==2){
						temp.setTyep(0);
					}
					return true;
				}
			}
			return false;
		}
		return false;
	}
	
	
	public void insertTask(int id,int dir){
		if(estate == 0 ){
			if(id>floorID){
											int up=-1;
											for(int i=0;i<upTasks.size();i++){
												int tt=((Task)upTasks.get(i)).getTask();
												int ty=((Task)upTasks.get(i)).getType();
												if(tt == id && ty!=0 )return;
												if(tt == id && ty==0 ){
													Task t=new Task(tt,2);
													upTasks.set(i,t);
													return;
												}
												if(tt>id){up=i;break;}
											}
											if(up!=-1){
												Task t=new Task(id,1);
												upTasks.add(up,t);
												return;
											}
											else{
												Task t=new Task(id,1);
												upTasks.addLast(t);
												return;
											}
			}
			if(id<floorID){
											int up=-1;
											for(int i=0;i<downTasks.size();i++){
												int tt=((Task)downTasks.get(i)).getTask();
												int ty=((Task)downTasks.get(i)).getType();
												if(tt == id && ty!=0 )return;
												if(tt == id && ty==0 ){
													Task t=new Task(tt,2);
													downTasks.set(i,t);
													return;
												}
												if(tt<id){up=i;break;}
											}
											if(up!=-1){
												Task t=new Task(id,1);
												downTasks.add(up,t);
												return;
											}
											else{
												Task t=new Task(id,1);
												downTasks.addLast(t);
												return;
											}
			}
		}
		else{
		
		boolean isup=true;
		if(run==upTasks){
			isup=true;
		}
		if(run==downTasks)
		{
			isup=false;
		}
		
		
		
		if(estate == dir){
			if(estate == 2 && id>floorID){
				int up= -1;
				for(int i=0; i<upTasks.size(); i++){
					int tt=((Task)upTasks.get(i)).getTask();
					int ty=((Task)upTasks.get(i)).getType();
					if(tt == id && ty!=0 )return;
					if(tt == id && ty==0 ){
						Task t=new Task(tt,2);
						upTasks.set(i,t);
						return;
					}
					if(tt>id){up=i;break;}
				}
				if(up!=-1){
					Task t=new Task(id,1);
					upTasks.add(up,t);
					return;
				}
				else{
					Task t=new Task(id,1);
					upTasks.addLast(t);
					return;
				}
			}
			if(estate ==1  && id<floorID){
				int up= -1;
				for(int i=0; i<downTasks.size(); i++){
					int tt=((Task)downTasks.get(i)).getTask();
					int ty=((Task)downTasks.get(i)).getType();
					if(tt == id && ty!=0 )return;
					if(tt == id && ty==0 ){
						Task t=new Task(tt,2);
						downTasks.set(i,t);
						return;
					}
					if(tt<id){up=i;break;}
				}
				if(up!=-1){
					Task t=new Task(id,1);
					downTasks.add(up,t);
					return;
				}
				else{
					Task t=new Task(id,1);
					downTasks.addLast(t);
					return;
				}
			}
			
			
			if(estate ==2 && id<floorID){
				int up= -1;
				for(int i=0; i<outup.size(); i++){
					int tt=((Task)outup.get(i)).getTask();
					int ty=((Task)outup.get(i)).getType();
					if(tt == id && ty!=0 )return;
					if(tt == id && ty==0 ){
						Task t=new Task(tt,2);
						outup.set(i,t);
						return;
					}
					if(tt>id){up=i;break;}
				}
				if(up!=-1){
					Task t=new Task(id,1);
					outup.add(up,t);
					return;
				}
				else{
					Task t=new Task(id,1);
					outup.addLast(t);
					return;
				}
			}
			if(estate ==1 && id>floorID ){
				int up= -1;
				for(int i=0; i<outdown.size(); i++){
					int tt=((Task)outdown.get(i)).getTask();
					int ty=((Task)outdown.get(i)).getType();
					if(tt == id && ty!=0 )return;
					if(tt == id && ty==0 ){
						Task t=new Task(tt,2);
						outdown.set(i,t);
						return;
					}
					if(tt<id){up=i;break;}
				}
				if(up!=-1){
					Task t=new Task(id,1);
					outdown.add(up,t);
					return;
				}
				else{
					Task t=new Task(id,1);
					outdown.addLast(t);
					return;
				}
			}
			
		}
		
		
		
		
		if(estate != dir){//反向
			
														int up=-1;
														for(int i=0;i<unrun.size();i++){
															int tt=((Task)unrun.get(i)).getTask();
															int ty=((Task)unrun.get(i)).getType();
															if(tt == id && ty!=0 )return;
															if(tt == id && ty==0 ){
																Task t=new Task(tt,2);
																unrun.set(i,t);
																return;
															}
															if(isup){
																if(tt<id){up=i;break;}
															}
															else{
																if(tt>id){up=i;break;}
															}
															
														}
														if(up!=-1){
															Task t=new Task(id,1);
															unrun.add(up,t);
															return;
														}
														else{
															Task t=new Task(id,1);
															unrun.addLast(t);
															return;
														}
														
		}
		
		}
		
	}
	
	public void emerge(LinkedList a,LinkedList b,boolean isup){
		
			for(int i=0;i<b.size();i++){
				Task tb=(Task)b.get(i);
				int up=-1;
				for(int j=0;j<a.size();j++){
					Task ta=(Task)a.get(j);
					if(tb.getTask()==ta.getTask() && ta.getType()==1){
						up=-2;
						break;
					}
					if(tb.getTask()==ta.getTask() && ta.getType()==0){
						ta.setTyep(2);
						up=-2;
						break;
					}
					if(isup){
						if(ta.getTask()>tb.getTask()){
							up=j;
							break;
						}
					}
					else{
						if(ta.getTask()>tb.getTask()){
							up=j;
							break;
						}
					}
					
				}
				if(up==-2){
					continue;
				}
				else if(up!=-1){
					Task t=new Task(tb.getTask(),1);
					a.add(up,t);
					continue;
				}
				else {
					Task t=new Task(tb.getTask(),1);
					a.addLast(t);
					continue;
				}
			}
			b.clear();
		
	}
		
		
	public void run(){
			
			while(true){
				
				if(estate==0 && (upTasks.size()>0 || downTasks.size()>0)){
					if(upTasks.size()>downTasks.size()){
						run = upTasks;
						unrun = downTasks;
						estate = 2;
					}
					else {
						run = downTasks;
						unrun = upTasks;
						estate = 1;
					}
				}
				
				
				if(floorID==target){
					isstop = true;
					num[floorID-1].setIcon(fg[floorID-1]);
				
					Task temp=(Task)run.removeFirst();
					System.out.println("response demand type "+temp.getType()+" on floor "+floorID);
					if(temp.getType()!=0){
						controlPn.setList(temp.getTask(),-1,estate);
					}
					target=0;
					
					try{
						self.sleep(3000);
					}catch(Exception e){
						e.printStackTrace();
					}
					//轮询门是否开着
					while(isopen){
						try{
							self.sleep(3000);
						}catch(Exception e){
							e.printStackTrace();
						}
					}
					
					isstop = false;
				}
				
				
				if(estate == 2 && upTasks.size()==0){
					this.emerge(downTasks,outdown,false);
					run=downTasks;
					unrun=upTasks;
					estate = 1;
				}
				if(estate == 1 && downTasks.size()==0){
					this.emerge(upTasks,outup,true);
					run=upTasks;
					unrun=downTasks;
					estate = 2;
				}
				
				
				
				if(run.size()>0){
					target=((Task)run.getFirst()).getTask();
				}
				else 
					target = 0;
				
				
				if(target>floorID&&target!=0){
					floorID ++;
				}
				if(target<floorID&&target!=0){
					floorID --;
				}
				
				
					
				try{
					self.sleep(1000);
					
					info.setIcon(state[floorID-1]);
					outside.setIcon(state[floorID-1]);
				}catch(Exception e){
					floorID = 1;
					estate = 0;
					upTasks.clear();
					downTasks.clear();
					e.printStackTrace();
				}
				
				
				for(int i=0;i<upTasks.size();i++){
					System.out.println("Lift"+liftID+"up      "+((Task)upTasks.get(i)).getTask());
				}
				for(int i=0;i<downTasks.size();i++){
					System.out.println("Lift"+liftID+"down    "+((Task)downTasks.get(i)).getTask());
				}
				for(int i=0;i<outup.size();i++){
					System.out.println("Lift"+liftID+"outup   "+((Task)outup.get(i)).getTask());
				}
				for(int i=0;i<outdown.size();i++){
					System.out.println("Lift"+liftID+"outdown "+((Task)outdown.get(i)).getTask());
				}
				
				//this.repaint();
			}
		}
	
	
		public static void main(String[] args){
			Lift t = new Lift("thread",null,null,0);
			t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
			t.pack();
			t.setVisible(true);
		}
}

⌨️ 快捷键说明

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