23、多线程:信号灯法

学习过程观看视频:[狂神说Java]
https://www.bilibili.com/video/BV1V4411p7EF?p=3
欢迎大家支持噢,很良心的老师了!

java代码

package com.zjl;

/**
 * Created by zjl
 * 2020/11/19
 **/
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){
    
    
                tv.play("快乐大本营-------");
            }else {
    
    
                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++) {
    
    
            this.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;
    }
}

运行结果:

/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java "-javaagent:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/lib/idea_rt.jar=50929:/Users/zhangjianlong/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.5662.53/IntelliJ IDEA.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/lib/tools.jar:/Users/zhangjianlong/testCode/Thread-Study/thread-study-01/target/classes:/Users/zhangjianlong/apache-maven-3.6.3/repository/commons-io/commons-io/2.6/commons-io-2.6.jar com.zjl.TestPC2
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音
演员表演了:快乐大本营-------
观众观看了:快乐大本营-------
演员表演了:抖音
观众观看了:抖音

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_41347385/article/details/109817307