zoukankan      html  css  js  c++  java
  • 生产者、消费者问题之闹钟

    需求:写一个闹钟程序,闹钟每隔2秒响一次,每次响5声,闹钟响铃后1秒,人将闹钟关闭.
    public class People implements Runnable {
      private String name;
      private Clock c;

      public People(String name, Clock c) {
      this.name = name;
        this.c = c;
      }

      public void run() {
        weakup();
      }

      public void weakup() {
        //睡觉的人时刻等待闹铃响
        while(true) {
          synchronized(c) {
            if(c.isRing()) {
              c.setRing(false);
              System.out.println("就起来了就起来");
              try {
                Thread.sleep(1000);
              } catch (InterruptedException e1) {
                e1.printStackTrace();
              }
              c.notify();
              try {
                c.wait();
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }else {
              c.setRing(true);
              c.notify();
              try {
                c.wait();
              } catch (InterruptedException e) {
                e.printStackTrace();
              }
            }
          }
        }
      }

      public String getName() {
        return name;
      }

      public void setName(String name) {
        this.name = name;
      }

      public Clock1 getC() {
        return c;
      }

      public void setC(Clock1 c) {
        this.c = c;
      }
    }

    public class Clock implements Runnable {
      private boolean isRing; //判断闹铃是否响过

      public void run() {
        ring();
      }

      public void ring() {
        //闹铃响5次,每次响3声
        for(int i = 0; i < 5; i++) {
          synchronized(this) {
          if(!isRing) {
            isRing = true;
            for(int j = 0; j < 3; j++) {
              System.out.println("叮叮叮...");
            }
            try {
              Thread.sleep(2000);
            } catch (InterruptedException e1) {
              e1.printStackTrace();
            }
            this.notify();
            try {
              this.wait();
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
           }else {
            try {
              isRing = false;
              this.notify();
              this.wait();
            } catch (InterruptedException e) {
              e.printStackTrace();
            }
          }
        }
      }

      public boolean isRing() {
        return isRing;
      }

      public void setRing(boolean isRing) {
        this.isRing = isRing;
      }
    }

    public class TestClockPeople {
      public static void main(String [] args) {
        Clock c = new Clock1();
        People p = new People("大姚", c);

        Thread ct = new Thread(c);
        Thread pt = new Thread(p);

        pt.setDaemon(true); //将人设置为守护线程
        ct.start();
        pt.start();
      }
    }

  • 相关阅读:
    leetcode167 Two Sum II
    leetcode18 4Sum
    leetcode15 three sum
    leetcode-1-Two Sum
    SQL优化——select
    Hadoop 集群搭建
    虚拟机中的两台主机怎么相互拷贝文件
    doker5
    docker4
    docker3
  • 原文地址:https://www.cnblogs.com/helloworldlx/p/8550356.html
Copyright © 2011-2022 走看看