进水控制+守护线程

//进水出水控制

//产品:水
class Water{
int water=0;//水量初始化
boolean flag=false;//进出水标志
}

//进水控制
class In extends Thread{
Water w;

public In(Water w,String name){//构造函数
	super(name);
	this.w=w;//使得w对象共享
}

public void run() {
	while(true){
		synchronized (w) {
			if(w.flag==false){
				if(w.water<=495){
					w.water+=5;
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"进水5,现在为"+w.water);
					w.flag=true;
					w.notify();//唤醒出水
				}
				else{
					System.out.println(Thread.currentThread().getName()+"进水0,现在为"+w.water);
					w.flag=true;
					w.notify();//唤醒出水
				}
					
			}
			else{
				try {
					w.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			
			
			
		}
		
	}
	
	
}

}
//出水控制
class Out extends Thread{
Water w;

public Out(Water w,String name){
	//this.w=w;//使得w对象共享
	super(name);
	this.w=w;//使得w对象共享
}

public void run(){
	
	while(true){
		
		synchronized (w) {
			
			if(w.flag==true){
				if(w.water!=0&&w.water>=2){
					w.water-=2;
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"出水2,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
				}
				else if(w.water!=0&&w.water==1){	
					w.water-=1;
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"出水1,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
					
				}
				else{
					System.out.println(Thread.currentThread().getName()+"出水0,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
					
				}
				
			}
			else{
				try {
					w.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			
			
		}
		
		
	}
	
}

}

public class Demo1 {

public static void main(String[] args) {
	Water w=new Water();//创建一个水对象w
	In in=new In(w,"进水控制");
	Out out=new Out(w,"出水控制");
	in.start();
	out.start();
	
	
	
	
}

}

//进水出水控制

//产品:水
class Water{
int water=0;//水量初始化
boolean flag=false;//进出水标志
}

//进水控制
class In extends Thread{
Water w;

public In(Water w,String name){//构造函数
	super(name);
	this.w=w;//使得w对象共享
}

public void run() {
	while(true){
		synchronized (w) {
			if(w.flag==false){
				if(w.water<=495){
					w.water+=5;
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"进水5,现在为"+w.water);
					w.flag=true;
					w.notify();//唤醒出水
				}
				else{
					System.out.println(Thread.currentThread().getName()+"进水0,现在为"+w.water);
					w.flag=true;
					w.notify();//唤醒出水
				}
					
			}
			else{
				try {
					w.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			
			
			
		}
		
	}
	
	
}

}
//出水控制
class Out extends Thread{
Water w;

public Out(Water w,String name){
	//this.w=w;//使得w对象共享
	super(name);
	this.w=w;//使得w对象共享
}

public void run(){
	
	while(true){
		
		synchronized (w) {
			
			if(w.flag==true){
				if(w.water!=0&&w.water>=2){
					w.water-=2;
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"出水2,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
				}
				else if(w.water!=0&&w.water==1){	
					w.water-=1;
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName()+"出水1,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
					
				}
				else{
					System.out.println(Thread.currentThread().getName()+"出水0,现在为"+w.water);
					w.flag=false;
					w.notify();//唤醒进水
					
				}
				
			}
			else{
				try {
					w.wait();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				
			}
			
			
		}
		
		
	}
	
}

}

public class Demo1 {

public static void main(String[] args) {
	Water w=new Water();//创建一个水对象w
	In in=new In(w,"进水控制");
	Out out=new Out(w,"出水控制");
	in.start();
	out.start();
	
	
	
	
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值