Java基础学习:多线程26(信号灯法)

Java基础学习:多线程26

  • 信号灯法

    • 并发协作模型:生产者/消费者模型:-->信号灯法;

    • 通过标志位进行控制;

 

  • 代码案例:

    /**
    * 测试生产者消费者问题2:信号灯法,标志位解决
    */
    public class TestPC2 {
       public static void main(String[] args) {

           TV tv=new TV();
           new Player(tv).start();
           new Watcher(tv).start();

      }
    }


    //生产者:演员
    class Player extends Thread{
       TV tv;
       public Player(TV tv){
           this.tv=tv;
      }

       @Override
       public void run() {
           for (int i = 0; i < 20; i++) {
               if(i%2==0){
                   this.tv.play("播放中,哈哈");
              }else{
                   this.tv.play("播放中,抖音");
              }
          }
      }
    }


    //消费者:观众
    class Watcher extends Thread{
       TV tv;
       public Watcher(TV tv){
           this.tv=tv;
      }

       @Override
       public void run() {
           for (int i = 0; i < 20; i++) {
               tv.watch();
          }
      }
    }


    //产品:节目
    class TV {

       //演员表演,观众等待 T
       //观众观看,演员等待 F
       String voice;//表演的节目

       boolean flag=true;

       //表演
       public synchronized void play(String voice){

           if(!flag){
               try {
                   this.wait();
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
          }
           System.out.println("演员表演了:"+voice);

           //通知观众观看
           this.notifyAll();

           this.voice=voice;
           this.flag =!this.flag;//取反
      }



       //观看
       public synchronized void watch(){
           if(flag){
               try {
                   this.wait();
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
          }
           System.out.println("观众观看了:"+voice);
           //通知演员表演
           this.notifyAll();
           this.flag =!this.flag;//取反

      }

    }

 

 

posted @   gzs1024  阅读(216)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示