package demo2;

 class Pooll {

    /**1:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.
     * 要求,进水与放水不能同时进行.
     水池一旦满了不能继续注水,一旦放空了,不可以继续放水. 进水的速度5L/s ,
       放水的速度2L/s  
     * @param args
     */

     int capacity = 0;    
 }
        
 
 //进水
class Feedwater  extends Thread{

     Pooll p;
 
  public Feedwater (Pooll p) {
      
         this.p = p;
   }
     
   @Override
   public 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();
                       }
                }
            }
          }
       }
 }
 

 // 出水
class Outwater extends Thread{
 
     Pooll p;
 
    public Outwater(Pooll 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 Pool {

    public static void main(String[] args) {
        
        Pooll p = new Pooll();
        
        Feedwater  in = new Feedwater (p);
        
        Outwater out = new Outwater (p);
        
              in.start();
           out.start();
    }
 }

水池进水与放水问题:有一个水池,水池的容量是固定 的500L,一边为进水口,一边为出水口.........(多线程应用)的更多相关文章

  1. 我的MacbookPro进水了!维修过程记录

    电脑进水与解决方案 如果事情有变坏的可能,不管这种可能性有多小,它总会发生.---墨菲定律 进水过程 2020年03月21日日下午3点左右,不小心把水杯碰倒了,水通过电脑右侧的键盘处进入了大概有10毫 ...

  2. 蓝桥杯试题利用数学知识经典解法,1.三个空瓶子换一瓶水;2.猜最后一个字母——猎八哥FLY

    本博客为本人原创,转载请在醒目位置表明出处. 1.乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下 去,但不允许赊账.请你计算一下,如果小明不浪 ...

  3. 对zip文件进行解压操作和对一个文件进行压缩操作

    注意这里用的是apche下的zip package org.springframework.validation; import org.apache.tools.zip.ZipEntry; impo ...

  4. Java模拟生产者-消费者问题。生产者不断的往仓库中存放产品,消费者从仓库中消费产品。其中生产者和消费者都可以有若干个。在这里,生产者是一个线程,消费者是一个线程。仓库容量有限,只有库满时生产者不能存

    需求分析:生产者生产产品,存放在仓库里,消费者从仓库里消费产品. 程序分析: 1.生产者仅仅在仓储未满时候生产,仓满则停止生产. 2.消费者仅仅在仓储有产品时候才能消费,仓空则等待. 3.当消费者发现 ...

  5. Day 2:线程与进程系列问题(二)

    补充: 线程的创建方式二: 1.自定义一个实现Runnable接口的类 2.实现Runnable接口中的run方法把自定义线程的任务写在run方法中 3.创建实现Runnable接口的对象 4.创建T ...

  6. java标签(label)求16进制字符串的整数和 把一个整数转为4个16进制字符表示

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f76cb } p.p2 { margin: 0.0px 0. ...

  7. [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程

    一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程 希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误. 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http ...

  8. Codeforces 刷水记录

    Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...

  9. 记录一个UDP收包丢包的问题

    这几天写GB28181平台接入层代码,对收到的PS包进行解包时,总是出现误码,最终导致rtsp点播服务中画面花屏. 分析了码流抓包数据之后,发现网络上没有丢包,遂认为PS流解包代码有bug,于是埋头分 ...

随机推荐

  1. opacity与RGBA透明的区别

    为什么不使用opacityCSS3 还允许通过opacity 声明来设置元素的透明度.该透明度的值也是一个介于0 到1 之间的小数(如将opacity 设置为0.1 表示为10%透明).但是这种透明度 ...

  2. php+js实现分页

    使用onclick传递参数时,参数为空分页无效.因此无刷新页面时可利用js重新获取input的值同样通过get地址传递到分页显示的php页面.page参数接收和传递方式必须一致为post或get. j ...

  3. 【three.js详解之一】入门篇

    [three.js详解之一]入门篇   开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...

  4. 理解python的with语句

    Python’s with statement provides a very convenient way of dealing with the situation where you have ...

  5. 基础小功能之(1)震动,(2)检测app是否在前台运行

    //开启震动 //添加权限<uses-permission android:name="android.permission.VIBRATE" /> private v ...

  6. 【HTML5】canvas画布练习

    第一步:获取画布元素 var canvas = document.getElementById("myCanvas"); var context = canvas.getConte ...

  7. How to ssh to your Amazon Elastic Beanstalk instance?

    Well, if it's ec2 or a digital ocean server, it would be a lot easier- you do what you normally do f ...

  8. vs 下安装boost

    首先到boost官网去下载最新的版本的boost库,选对对应的平台版本. 下载官网 解压文件, 先运行bootstrap.bat文件,生成bjam.exe并运行它.推荐完全编译的方式运行bjam 推荐 ...

  9. Javascript 自动计算生日

    首先调用方法需要注意 //inner_page为外围大层,确保时间可以实时修改  $(".inner_page").mouseover(function() {        va ...

  10. nginx-1.7.9快速启动连接手机测移动端页面

    大家好,本人之前用nginx熟熟的,后来一段时间不用,当今天再次想使用的时候,发现,悲催的是,竟然忘记怎么用了!噢噢,于是乎,就从网上搜索怎样让nginx和移动端页面联系在一起测试. 可惜的是,我搜索 ...