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. String类常用方法小节

    (1)String.equals() 返回值是boolean类型 equals(Object anObject)           将此字符串与指定的对象比较. (2)length() 返回值是in ...

  2. Eclipse 搭建 Maven Web项目

    第一步:安装JDK: 第二步:安装Eclipse: 第三步:安装tomcat7: 第四步:安装maven插件: 4.1 下载maven:http://maven.apache.org/download ...

  3. C#同一项目中不同文件或类中的方法进行调用

    有两种方法,一是将被调用的类设置成静态类Static,这样就可以直接点出来了,二是将被调用的方法所在类设置成public,这几必须在调用类中先将被调用的类进行实体化,new()出来,再点出来. 一. ...

  4. 操作系统和程序设计语言的API使用的字符编码分析

     1.Java的运行环境中,String是什么编码? 使用java做程序设计语言,字符编码是和jvm相关的,和操作系统无关. java默认的编码是jvm在安装的时候就确定了的,它是根据你的系统的环境确 ...

  5. TcpListener的异步调用内存泄漏---最近测试结果,没有泄露

    我后来加大了client的连接/断开的次数(500,1000),Server端的连接被释放了. 这说明: 1. 此代码是 可以正常工作的. 2.TcpListener/TcpListener的asyn ...

  6. Linux命令全称

    知其表亦需知其意 apt = Advanced Packaging Tool ar = archiver as = assembler awk = "Aho Weiberger and Ke ...

  7. 学习SVG系列(2):SVG图形系列

    SVG形状: 矩形 <rect> 圆形 <circle> 椭圆 <ellipse> 线 <line> 折线 <polyline> 多边形 & ...

  8. const,static,extern简介

    一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编 ...

  9. 【Python】str类方法说明

    #capitalize():字符串首字符大写 string = 'this is a string.'new_str = string.capitalize()print(new_str)#输出:Th ...

  10. 用Android Studio 出现的问题

    解决的办法是cmd--恢复网络设置---netsh winsock reset----重启电脑解决.