本文主要是介绍一道进出水的线程问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一道java作业题
/*
作业1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.要求,进水与放水不能同时进行.
水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s , 放水的速度2L/s
*/package cn.itcast.thread;import javax.net.ssl.HandshakeCompletedEvent;class pool {int capacity = 0; //定义一个类,初始化一开始的容量为0}//进水
class Feedwater extends Thread{pool p;public Feedwater (pool p) {this.p = p;}@Overridepublic void run() {while(true){synchronized (p) { // 任意类型的对象 ,锁对象应该是同一个对象 if((p.capacity + 5) <= 500){System.out.println("进水中,水池容量为:"+(p.capacity + 5));p.capacity += 5;p.notify();}else{System.out.println("水池水满了"); try {//必须要有的异常获取机制p.wait();} catch (InterruptedException e) { e.printStackTrace();}}}}}@Override
public boolean equals(Object obj) {// TODO Auto-generated method stubreturn super.equals(obj); //重写equals方法
}}// 出水
class Outwater extends Thread{pool p;public Outwater(pool p) {this.p = p;}public void run() {while(true){synchronized (p) { // 任意类型的对象 ,锁对象应该是同一个对象 if((p.capacity - 2) >= 0){System.out.println("水池出水中,水池容量为:"+(p.capacity - 2));p.capacity -= 2;p.notify(); }else{ System.out.println("水池没水了");try {p.wait();} catch (InterruptedException e) { e.printStackTrace();}}}}}}public class homework {public static void main(String[] args) {pool p = new pool();Feedwater in = new Feedwater (p);Outwater out = new Outwater (p);in.start();out.start();}
}
越到后面就越是有多个知识点的结合,从打包,到重写,异常处理机制,再到简单的定义对象,引用对象,都是一个联系的好机会~
这篇关于一道进出水的线程问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!