//进水出水控制
//产品:水
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();
}
}