zoukankan      html  css  js  c++  java
  • java 中之经典多线程问题——进水放水

    public class ThreadInflowAndOutflow {

    public static void main(String[] args) {
    Water water=new Water();

    inflow fi=new inflow(water);
    outflow of=new outflow(water);

    Thread t1=new Thread(fi);
    Thread t2=new Thread(of);

    t1.start();
    t2.start();

    }

    }


    class Water{

    int count = 50;
    }
    class inflow implements Runnable{


    Water water;
    public inflow(Water water){
    this.water=water;
    }

    @Override
    public void run() {

    while(true){
    synchronized (water) {
    while(true){
    if(water.count>=20){
    water.notify();

    try {
    water.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }

    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    water.count+=3;
    System.out.println("现在是在进水,水量为:"+water.count);
    }
    }
    }
    }

    }


    class outflow implements Runnable{

    Water water;
    public outflow(Water water){
    this.water=water;
    }


    @Override
    public void run() {

    while(true){
    synchronized (water) {
    while(true){
    if(water.count<=30){
    water.notify();

    try {
    water.wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    }

    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    water.count--;
    System.out.println("现在是放水,剩余水量为:"+water.count);
    }
    }
    }

    }

    }

  • 相关阅读:
    QML学习笔记之一
    使用 DLL 的优点
    制作Windows的ico图标
    CentOS安装JDK
    CentOS 7中安装和配置Promethues
    查看和指定SpringBoot内嵌Tomcat的版本
    CentOS中安装Azkaban 2.5
    Centos7 安装Nodejs
    SpringBoot实用技巧札记
    SQL实用札记【SQL Sever篇】
  • 原文地址:https://www.cnblogs.com/1a2b/p/8919208.html
Copyright © 2011-2022 走看看