22、多线程:管程法

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

package com.zjl;

/**
 * Created by zjl
 * 2020/11/19
 **/
public class TestPC {
    
    

    public static void main(String[] args) {
    
    
        SynContainer synContainer = new SynContainer();

        new Productor(synContainer).start();
        new Consumer(synContainer).start();
    }

}

//生产者
class Productor extends Thread{
    
    

    SynContainer synContainer;

    public Productor(SynContainer synContainer){
    
    
        this.synContainer = synContainer;
    }

    //生产
    @Override
    public void run() {
    
    
        for (int i = 0; i < 100; i++) {
    
    
            synContainer.push(new Chicken(i));
            System.out.println("生产了第" + i + "只鸡");
        }
    }
}
//消费者
class Consumer extends Thread{
    
    
    SynContainer synContainer;

    public Consumer(SynContainer synContainer){
    
    
        this.synContainer = synContainer;
    }
    //消费
    @Override
    public void run() {
    
    
        for (int i = 0; i < 100; i++) {
    
    
            System.out.println("消费了第---->" + synContainer.pop().id + "只鸡");
        }
    }
}

//产品
class Chicken{
    
    
    int id;  //产品编号

    public Chicken(int id) {
    
    
        this.id = id;
    }
}

//缓冲区
class SynContainer{
    
    

    //需要一个容器的大小,设置一个Chicken类型,大小为10的数组
    Chicken[] chickens = new Chicken[10];
    //容器计数器
    int count = 0;

    //生产者
    public synchronized void push(Chicken chicken){
    
    
        //如果容器满了,就需要等待消费者
        if(count == chickens.length){
    
    
            //通知消费者消费,生产者等待
            try {
    
    
                this.wait();
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }
        }
        //如果没有满,我们就需要丢入产品
        chickens[count] = chicken;
        count++;

        //通知消费者消费
        this.notifyAll();

    }

    //消费者消费产品
    public synchronized Chicken pop(){
    
    
        //判断能否消费
        if(0 == count){
    
    
            //通知消费者生产,消费者等待
            try {
    
    
                this.wait();
            } catch (InterruptedException e) {
    
    
                e.printStackTrace();
            }
        }
        //如果可以消费
        count--;
        Chicken chicken = chickens[count];

        //吃完了,通知生产者生产
        this.notifyAll();
        return chicken;
    }

}

运行结果:

/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=49556:/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.TestPC
生产了第0只鸡
生产了第1只鸡
生产了第2只鸡
生产了第3只鸡
生产了第4只鸡
生产了第5只鸡
生产了第6只鸡
生产了第7只鸡
生产了第8只鸡
生产了第9只鸡
消费了第---->9只鸡
生产了第10只鸡
消费了第---->10只鸡
生产了第11只鸡
消费了第---->11只鸡
生产了第12只鸡
消费了第---->12只鸡
生产了第13只鸡
消费了第---->13只鸡
生产了第14只鸡
消费了第---->14只鸡
生产了第15只鸡
消费了第---->15只鸡
生产了第16只鸡
消费了第---->16只鸡
生产了第17只鸡
消费了第---->17只鸡
生产了第18只鸡
生产了第19只鸡
消费了第---->18只鸡
消费了第---->19只鸡
消费了第---->20只鸡
消费了第---->8只鸡
消费了第---->7只鸡
消费了第---->6只鸡
消费了第---->5只鸡
消费了第---->4只鸡
消费了第---->3只鸡
消费了第---->2只鸡
消费了第---->1只鸡
消费了第---->0只鸡
生产了第20只鸡
生产了第21只鸡
消费了第---->21只鸡
生产了第22只鸡
消费了第---->22只鸡
生产了第23只鸡
消费了第---->23只鸡
生产了第24只鸡
消费了第---->24只鸡
消费了第---->25只鸡
生产了第25只鸡
生产了第26只鸡
生产了第27只鸡
生产了第28只鸡
生产了第29只鸡
消费了第---->26只鸡
消费了第---->30只鸡
消费了第---->29只鸡
生产了第30只鸡
消费了第---->28只鸡
消费了第---->31只鸡
消费了第---->27只鸡
生产了第31只鸡
生产了第32只鸡
生产了第33只鸡
生产了第34只鸡
生产了第35只鸡
生产了第36只鸡
生产了第37只鸡
生产了第38只鸡
生产了第39只鸡
生产了第40只鸡
生产了第41只鸡
生产了第42只鸡
消费了第---->32只鸡
消费了第---->42只鸡
消费了第---->43只鸡
消费了第---->41只鸡
消费了第---->40只鸡
消费了第---->39只鸡
生产了第43只鸡
消费了第---->38只鸡
生产了第44只鸡
生产了第45只鸡
生产了第46只鸡
生产了第47只鸡
生产了第48只鸡
生产了第49只鸡
消费了第---->44只鸡
消费了第---->49只鸡
生产了第50只鸡
消费了第---->50只鸡
生产了第51只鸡
消费了第---->51只鸡
消费了第---->52只鸡
消费了第---->48只鸡
消费了第---->47只鸡
消费了第---->46只鸡
消费了第---->45只鸡
消费了第---->37只鸡
消费了第---->36只鸡
消费了第---->35只鸡
消费了第---->34只鸡
消费了第---->33只鸡
生产了第52只鸡
生产了第53只鸡
消费了第---->53只鸡
消费了第---->54只鸡
生产了第54只鸡
消费了第---->55只鸡
生产了第55只鸡
生产了第56只鸡
生产了第57只鸡
生产了第58只鸡
生产了第59只鸡
生产了第60只鸡
生产了第61只鸡
消费了第---->56只鸡
生产了第62只鸡
生产了第63只鸡
生产了第64只鸡
生产了第65只鸡
生产了第66只鸡
生产了第67只鸡
消费了第---->62只鸡
消费了第---->67只鸡
消费了第---->68只鸡
消费了第---->66只鸡
消费了第---->65只鸡
消费了第---->64只鸡
消费了第---->63只鸡
消费了第---->61只鸡
消费了第---->60只鸡
消费了第---->59只鸡
消费了第---->58只鸡
消费了第---->57只鸡
生产了第68只鸡
生产了第69只鸡
生产了第70只鸡
生产了第71只鸡
生产了第72只鸡
生产了第73只鸡
生产了第74只鸡
生产了第75只鸡
生产了第76只鸡
生产了第77只鸡
生产了第78只鸡
生产了第79只鸡
消费了第---->69只鸡
消费了第---->79只鸡
生产了第80只鸡
生产了第81只鸡
消费了第---->80只鸡
消费了第---->81只鸡
生产了第82只鸡
生产了第83只鸡
消费了第---->82只鸡
消费了第---->83只鸡
生产了第84只鸡
消费了第---->84只鸡
生产了第85只鸡
生产了第86只鸡
消费了第---->85只鸡
消费了第---->86只鸡
消费了第---->87只鸡
消费了第---->78只鸡
消费了第---->77只鸡
消费了第---->76只鸡
消费了第---->75只鸡
消费了第---->74只鸡
消费了第---->73只鸡
消费了第---->72只鸡
消费了第---->71只鸡
消费了第---->70只鸡
生产了第87只鸡
生产了第88只鸡
生产了第89只鸡
生产了第90只鸡
生产了第91只鸡
生产了第92只鸡
生产了第93只鸡
生产了第94只鸡
生产了第95只鸡
生产了第96只鸡
生产了第97只鸡
生产了第98只鸡
消费了第---->88只鸡
消费了第---->98只鸡
生产了第99只鸡
消费了第---->99只鸡
消费了第---->97只鸡
消费了第---->96只鸡
消费了第---->95只鸡
消费了第---->94只鸡
消费了第---->93只鸡
消费了第---->92只鸡
消费了第---->91只鸡
消费了第---->90只鸡
消费了第---->89只鸡

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_41347385/article/details/109812816
今日推荐