java 线程wait()与notify()和notifyAll做生产者消费者模式

  • 代码如下
package com.myzy.auth.reetrantlock;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 场景介绍:
 *  一个生产者  120个消费者
 *  生产者生产目标是100个,到了100个就不生产了;同时生产者在存在可以卖的茶大于5个同时已经生产了大于10个的情况下可以休息,然后等待消费者的唤醒
 *  消费者只要有茶叶都可以买,没有茶叶可以唤醒生产者,然后等待生产,除非生产者已经生产了100个而且卖完了,消费者才会推出,打印没有买到
 * @Description 生产者和消费者使用同一把锁
 */
public class TestWaitAndNotify {
    //目标只生产100袋茶叶
    private static transient int targerTeas = 100;
    //已经生产的茶叶袋数
    private static transient AtomicInteger produced = new AtomicInteger(0);
    //出去卖出的茶叶还剩余的茶叶数量
    private static transient AtomicInteger exist = new AtomicInteger(0);
    //卖出去多少袋
    private static transient AtomicInteger sell = new AtomicInteger(0);

    public static void main(String[] args) {
        Object objLock = new Object();

        //生产者
        Runnable producerTask = () -> {
            synchronized (objLock) {
                while (produced.intValue() < 100) {
                    try {
                        if (exist.intValue() > 5 && produced.intValue() > 10) {
                            objLock.notify();
                            objLock.wait();
                        }
                        Thread.sleep(1000L);
                        produced.incrementAndGet();
                        exist.incrementAndGet();
                        System.out.println("====================生产了" + produced.intValue() + "个");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                        break;
                    }
                }
                System.out.println("已经生产了100个  不卖了  只卖100个!!!!!!!!!!!!!!!!!!!!");
                objLock.notifyAll();
            }
        };

        //消费者
        Runnable consumerTask = () -> {
            synchronized (objLock) {
                try {
                    while (exist.intValue() <= 0) {
                        if (produced.intValue() == targerTeas && exist.intValue() <= 0) {
                            System.out.println("沒有了  今天不卖了" + Thread.currentThread().getName() + "没有买到");
                            throw new RuntimeException();
                        }
                        objLock.notifyAll();
                        objLock.wait();
                    }
                    exist.decrementAndGet();
                    sell.incrementAndGet();
                    System.out.println(Thread.currentThread().getName() + "买了茶;卖了第" + sell.intValue() + "袋茶叶");
                } catch (Exception e) {

                }
            }
        };
        System.out.println("开始买卖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
        new Thread(producerTask).start();
        for (int i = 1; i < 121; i++) {
            new Thread(consumerTask, "第" + i + "个买主").start();
        }
    }
}

  • 执行结果
"C:\Program Files\Java\jdk1.8.0_231\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=62275:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_231\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_231\jre\lib\rt.jar;D:\work\code\auth\target\classes;D:\work\repository\org\springframework\cloud\spring-cloud-openfeign-core\2.2.5.RELEASE\spring-cloud-openfeign-core-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-autoconfigure\2.2.3.RELEASE\spring-boot-autoconfigure-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot\2.2.3.RELEASE\spring-boot-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-netflix-ribbon\2.2.5.RELEASE\spring-cloud-netflix-ribbon-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-netflix-archaius\2.2.5.RELEASE\spring-cloud-netflix-archaius-2.2.5.RELEASE.jar;D:\work\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;D:\work\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;D:\work\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;D:\work\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-openfeign\2.2.5.RELEASE\spring-cloud-starter-openfeign-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter\2.2.5.RELEASE\spring-cloud-starter-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\security\spring-security-rsa\1.0.9.RELEASE\spring-security-rsa-1.0.9.RELEASE.jar;D:\work\repository\org\bouncycastle\bcpkix-jdk15on\1.64\bcpkix-jdk15on-1.64.jar;D:\work\repository\org\bouncycastle\bcprov-jdk15on\1.64\bcprov-jdk15on-1.64.jar;D:\work\repository\org\springframework\spring-web\5.2.3.RELEASE\spring-web-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-beans\5.2.3.RELEASE\spring-beans-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-core\5.2.3.RELEASE\spring-core-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-jcl\5.2.3.RELEASE\spring-jcl-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-commons\2.2.5.RELEASE\spring-cloud-commons-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\security\spring-security-crypto\5.2.1.RELEASE\spring-security-crypto-5.2.1.RELEASE.jar;D:\work\repository\io\github\openfeign\feign-core\10.10.1\feign-core-10.10.1.jar;D:\work\repository\io\github\openfeign\feign-slf4j\10.10.1\feign-slf4j-10.10.1.jar;D:\work\repository\io\github\openfeign\feign-hystrix\10.10.1\feign-hystrix-10.10.1.jar;D:\work\repository\com\netflix\archaius\archaius-core\0.7.6\archaius-core-0.7.6.jar;D:\work\repository\com\google\code\findbugs\jsr305\3.0.1\jsr305-3.0.1.jar;D:\work\repository\commons-configuration\commons-configuration\1.8\commons-configuration-1.8.jar;D:\work\repository\com\netflix\hystrix\hystrix-core\1.5.18\hystrix-core-1.5.18.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-web\2.2.3.RELEASE\spring-boot-starter-web-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter\2.2.3.RELEASE\spring-boot-starter-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-logging\2.2.3.RELEASE\spring-boot-starter-logging-2.2.3.RELEASE.jar;D:\work\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\work\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\work\repository\org\apache\logging\log4j\log4j-to-slf4j\2.12.1\log4j-to-slf4j-2.12.1.jar;D:\work\repository\org\apache\logging\log4j\log4j-api\2.12.1\log4j-api-2.12.1.jar;D:\work\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\work\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\work\repository\org\yaml\snakeyaml\1.25\snakeyaml-1.25.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-json\2.2.3.RELEASE\spring-boot-starter-json-2.2.3.RELEASE.jar;D:\work\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.10.2\jackson-datatype-jdk8-2.10.2.jar;D:\work\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.10.2\jackson-datatype-jsr310-2.10.2.jar;D:\work\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.10.2\jackson-module-parameter-names-2.10.2.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-tomcat\2.2.3.RELEASE\spring-boot-starter-tomcat-2.2.3.RELEASE.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.30\tomcat-embed-core-9.0.30.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.30\tomcat-embed-el-9.0.30.jar;D:\work\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.30\tomcat-embed-websocket-9.0.30.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-validation\2.2.3.RELEASE\spring-boot-starter-validation-2.2.3.RELEASE.jar;D:\work\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;D:\work\repository\org\hibernate\validator\hibernate-validator\6.0.18.Final\hibernate-validator-6.0.18.Final.jar;D:\work\repository\org\jboss\logging\jboss-logging\3.4.1.Final\jboss-logging-3.4.1.Final.jar;D:\work\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;D:\work\repository\org\springframework\spring-webmvc\5.2.3.RELEASE\spring-webmvc-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-context\5.2.3.RELEASE\spring-context-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-expression\5.2.3.RELEASE\spring-expression-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-actuator\2.2.3.RELEASE\spring-boot-starter-actuator-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-actuator-autoconfigure\2.2.3.RELEASE\spring-boot-actuator-autoconfigure-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\boot\spring-boot-actuator\2.2.3.RELEASE\spring-boot-actuator-2.2.3.RELEASE.jar;D:\work\repository\io\micrometer\micrometer-core\1.3.2\micrometer-core-1.3.2.jar;D:\work\repository\org\hdrhistogram\HdrHistogram\2.1.11\HdrHistogram-2.1.11.jar;D:\work\repository\org\latencyutils\LatencyUtils\2.0.3\LatencyUtils-2.0.3.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2.2.3.RELEASE\spring-cloud-starter-alibaba-nacos-discovery-2.2.3.RELEASE.jar;D:\work\repository\com\alibaba\nacos\nacos-client\1.3.3\nacos-client-1.3.3.jar;D:\work\repository\com\alibaba\nacos\nacos-common\1.3.3\nacos-common-1.3.3.jar;D:\work\repository\org\apache\httpcomponents\httpasyncclient\4.1.4\httpasyncclient-4.1.4.jar;D:\work\repository\org\apache\httpcomponents\httpcore\4.4.13\httpcore-4.4.13.jar;D:\work\repository\org\apache\httpcomponents\httpcore-nio\4.4.13\httpcore-nio-4.4.13.jar;D:\work\repository\com\alibaba\nacos\nacos-api\1.3.3\nacos-api-1.3.3.jar;D:\work\repository\org\apache\commons\commons-lang3\3.9\commons-lang3-3.9.jar;D:\work\repository\com\google\guava\guava\29.0-jre\guava-29.0-jre.jar;D:\work\repository\com\google\guava\failureaccess\1.0.1\failureaccess-1.0.1.jar;D:\work\repository\com\google\guava\listenablefuture\9999.0-empty-to-avoid-conflict-with-guava\listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar;D:\work\repository\org\checkerframework\checker-qual\2.11.1\checker-qual-2.11.1.jar;D:\work\repository\com\google\errorprone\error_prone_annotations\2.3.4\error_prone_annotations-2.3.4.jar;D:\work\repository\com\google\j2objc\j2objc-annotations\1.3\j2objc-annotations-1.3.jar;D:\work\repository\commons-codec\commons-codec\1.13\commons-codec-1.13.jar;D:\work\repository\io\prometheus\simpleclient\0.5.0\simpleclient-0.5.0.jar;D:\work\repository\com\alibaba\spring\spring-context-support\1.0.10\spring-context-support-1.0.10.jar;D:\work\repository\org\springframework\cloud\spring-cloud-context\2.2.5.RELEASE\spring-cloud-context-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-netflix-ribbon\2.2.5.RELEASE\spring-cloud-starter-netflix-ribbon-2.2.5.RELEASE.jar;D:\work\repository\org\springframework\cloud\spring-cloud-starter-netflix-archaius\2.2.5.RELEASE\spring-cloud-starter-netflix-archaius-2.2.5.RELEASE.jar;D:\work\repository\com\netflix\ribbon\ribbon\2.3.0\ribbon-2.3.0.jar;D:\work\repository\com\netflix\ribbon\ribbon-transport\2.3.0\ribbon-transport-2.3.0.jar;D:\work\repository\io\reactivex\rxnetty-contexts\0.4.9\rxnetty-contexts-0.4.9.jar;D:\work\repository\io\reactivex\rxnetty-servo\0.4.9\rxnetty-servo-0.4.9.jar;D:\work\repository\javax\inject\javax.inject\1\javax.inject-1.jar;D:\work\repository\io\reactivex\rxnetty\0.4.9\rxnetty-0.4.9.jar;D:\work\repository\com\netflix\ribbon\ribbon-core\2.3.0\ribbon-core-2.3.0.jar;D:\work\repository\commons-lang\commons-lang\2.6\commons-lang-2.6.jar;D:\work\repository\com\netflix\ribbon\ribbon-httpclient\2.3.0\ribbon-httpclient-2.3.0.jar;D:\work\repository\commons-collections\commons-collections\3.2.2\commons-collections-3.2.2.jar;D:\work\repository\org\apache\httpcomponents\httpclient\4.5.10\httpclient-4.5.10.jar;D:\work\repository\com\sun\jersey\jersey-client\1.19.1\jersey-client-1.19.1.jar;D:\work\repository\com\sun\jersey\jersey-core\1.19.1\jersey-core-1.19.1.jar;D:\work\repository\javax\ws\rs\jsr311-api\1.1.1\jsr311-api-1.1.1.jar;D:\work\repository\com\sun\jersey\contribs\jersey-apache-client4\1.19.1\jersey-apache-client4-1.19.1.jar;D:\work\repository\com\netflix\servo\servo-core\0.12.21\servo-core-0.12.21.jar;D:\work\repository\com\netflix\netflix-commons\netflix-commons-util\0.3.0\netflix-commons-util-0.3.0.jar;D:\work\repository\com\netflix\ribbon\ribbon-loadbalancer\2.3.0\ribbon-loadbalancer-2.3.0.jar;D:\work\repository\com\netflix\netflix-commons\netflix-statistics\0.1.1\netflix-statistics-0.1.1.jar;D:\work\repository\io\reactivex\rxjava\1.3.8\rxjava-1.3.8.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2.2.3.RELEASE\spring-cloud-starter-alibaba-nacos-config-2.2.3.RELEASE.jar;D:\work\repository\org\projectlombok\lombok\1.18.10\lombok-1.18.10.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-jdbc\2.2.3.RELEASE\spring-boot-starter-jdbc-2.2.3.RELEASE.jar;D:\work\repository\com\zaxxer\HikariCP\3.4.2\HikariCP-3.4.2.jar;D:\work\repository\org\springframework\spring-jdbc\5.2.3.RELEASE\spring-jdbc-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-tx\5.2.3.RELEASE\spring-tx-5.2.3.RELEASE.jar;D:\work\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.2\mybatis-spring-boot-starter-1.3.2.jar;D:\work\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.2\mybatis-spring-boot-autoconfigure-1.3.2.jar;D:\work\repository\org\mybatis\mybatis\3.4.6\mybatis-3.4.6.jar;D:\work\repository\org\mybatis\mybatis-spring\1.3.2\mybatis-spring-1.3.2.jar;D:\work\repository\mysql\mysql-connector-java\8.0.19\mysql-connector-java-8.0.19.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-data-redis\2.2.3.RELEASE\spring-boot-starter-data-redis-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-redis\2.2.4.RELEASE\spring-data-redis-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-keyvalue\2.2.4.RELEASE\spring-data-keyvalue-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\spring-oxm\5.2.3.RELEASE\spring-oxm-5.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-context-support\5.2.3.RELEASE\spring-context-support-5.2.3.RELEASE.jar;D:\work\repository\io\lettuce\lettuce-core\5.2.1.RELEASE\lettuce-core-5.2.1.RELEASE.jar;D:\work\repository\io\netty\netty-common\4.1.45.Final\netty-common-4.1.45.Final.jar;D:\work\repository\io\netty\netty-handler\4.1.45.Final\netty-handler-4.1.45.Final.jar;D:\work\repository\io\netty\netty-buffer\4.1.45.Final\netty-buffer-4.1.45.Final.jar;D:\work\repository\io\netty\netty-codec\4.1.45.Final\netty-codec-4.1.45.Final.jar;D:\work\repository\io\netty\netty-transport\4.1.45.Final\netty-transport-4.1.45.Final.jar;D:\work\repository\io\netty\netty-resolver\4.1.45.Final\netty-resolver-4.1.45.Final.jar;D:\work\repository\io\projectreactor\reactor-core\3.3.2.RELEASE\reactor-core-3.3.2.RELEASE.jar;D:\work\repository\org\reactivestreams\reactive-streams\1.0.3\reactive-streams-1.0.3.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-data-mongodb\2.2.3.RELEASE\spring-boot-starter-data-mongodb-2.2.3.RELEASE.jar;D:\work\repository\org\mongodb\mongodb-driver\3.11.2\mongodb-driver-3.11.2.jar;D:\work\repository\org\mongodb\bson\3.11.2\bson-3.11.2.jar;D:\work\repository\org\mongodb\mongodb-driver-core\3.11.2\mongodb-driver-core-3.11.2.jar;D:\work\repository\org\springframework\data\spring-data-mongodb\2.2.4.RELEASE\spring-data-mongodb-2.2.4.RELEASE.jar;D:\work\repository\org\springframework\data\spring-data-commons\2.2.4.RELEASE\spring-data-commons-2.2.4.RELEASE.jar;D:\work\repository\org\apache\shiro\shiro-spring\1.3.2\shiro-spring-1.3.2.jar;D:\work\repository\org\apache\shiro\shiro-core\1.3.2\shiro-core-1.3.2.jar;D:\work\repository\commons-beanutils\commons-beanutils\1.8.3\commons-beanutils-1.8.3.jar;D:\work\repository\org\apache\shiro\shiro-web\1.3.2\shiro-web-1.3.2.jar;D:\work\repository\com\xuxueli\xxl-job-core\2.3.0\xxl-job-core-2.3.0.jar;D:\work\repository\io\netty\netty-all\4.1.45.Final\netty-all-4.1.45.Final.jar;D:\work\repository\com\google\code\gson\gson\2.8.6\gson-2.8.6.jar;D:\work\repository\org\codehaus\groovy\groovy\2.5.9\groovy-2.5.9.jar;D:\work\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\work\repository\org\springframework\boot\spring-boot-starter-aop\2.2.3.RELEASE\spring-boot-starter-aop-2.2.3.RELEASE.jar;D:\work\repository\org\springframework\spring-aop\5.2.3.RELEASE\spring-aop-5.2.3.RELEASE.jar;D:\work\repository\org\aspectj\aspectjweaver\1.9.5\aspectjweaver-1.9.5.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-sentinel\2.1.1.RELEASE\spring-cloud-starter-alibaba-sentinel-2.1.1.RELEASE.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-alibaba-sentinel\2.1.1.RELEASE\spring-cloud-alibaba-sentinel-2.1.1.RELEASE.jar;D:\work\repository\com\alibaba\csp\sentinel-transport-simple-http\1.8.0\sentinel-transport-simple-http-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-transport-common\1.8.0\sentinel-transport-common-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-datasource-extension\1.8.0\sentinel-datasource-extension-1.8.0.jar;D:\work\repository\com\alibaba\fastjson\1.2.71\fastjson-1.2.71.jar;D:\work\repository\com\alibaba\csp\sentinel-annotation-aspectj\1.8.0\sentinel-annotation-aspectj-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-core\1.8.0\sentinel-core-1.8.0.jar;D:\work\repository\org\aspectj\aspectjrt\1.9.5\aspectjrt-1.9.5.jar;D:\work\repository\com\alibaba\csp\sentinel-web-servlet\1.8.0\sentinel-web-servlet-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-spring-webflux-adapter\1.8.0\sentinel-spring-webflux-adapter-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-reactor-adapter\1.8.0\sentinel-reactor-adapter-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-parameter-flow-control\1.8.0\sentinel-parameter-flow-control-1.8.0.jar;D:\work\repository\com\googlecode\concurrentlinkedhashmap\concurrentlinkedhashmap-lru\1.4.2\concurrentlinkedhashmap-lru-1.4.2.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-server-default\1.8.0\sentinel-cluster-server-default-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-common-default\1.8.0\sentinel-cluster-common-default-1.8.0.jar;D:\work\repository\com\alibaba\csp\sentinel-cluster-client-default\1.8.0\sentinel-cluster-client-default-1.8.0.jar;D:\work\repository\com\alibaba\cloud\spring-cloud-alibaba-sentinel-datasource\2.2.3.RELEASE\spring-cloud-alibaba-sentinel-datasource-2.2.3.RELEASE.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-core\2.10.0\jackson-core-2.10.0.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-databind\2.10.0\jackson-databind-2.10.0.jar;D:\work\repository\com\fasterxml\jackson\core\jackson-annotations\2.10.2\jackson-annotations-2.10.2.jar" com.myzy.auth.reetrantlock.TestWaitAndNotify
开始买卖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
====================生产了1====================生产了2====================生产了3====================生产了4====================生产了5====================生产了6====================生产了7====================生产了8====================生产了9====================生产了10====================生产了11个
第120个买主买了茶;卖了第1袋茶叶
第119个买主买了茶;卖了第2袋茶叶
第118个买主买了茶;卖了第3袋茶叶
第117个买主买了茶;卖了第4袋茶叶
第116个买主买了茶;卖了第5袋茶叶
第115个买主买了茶;卖了第6袋茶叶
第114个买主买了茶;卖了第7袋茶叶
第113个买主买了茶;卖了第8袋茶叶
第112个买主买了茶;卖了第9袋茶叶
第111个买主买了茶;卖了第10袋茶叶
第110个买主买了茶;卖了第11袋茶叶
====================生产了12====================生产了13====================生产了14====================生产了15====================生产了16====================生产了17个
第109个买主买了茶;卖了第12袋茶叶
第107个买主买了茶;卖了第13袋茶叶
第108个买主买了茶;卖了第14袋茶叶
第106个买主买了茶;卖了第15袋茶叶
第105个买主买了茶;卖了第16袋茶叶
第102个买主买了茶;卖了第17袋茶叶
====================生产了18====================生产了19====================生产了20====================生产了21====================生产了22====================生产了23个
第104个买主买了茶;卖了第18袋茶叶
第103个买主买了茶;卖了第19袋茶叶
第101个买主买了茶;卖了第20袋茶叶
第100个买主买了茶;卖了第21袋茶叶
第99个买主买了茶;卖了第22袋茶叶
第98个买主买了茶;卖了第23袋茶叶
====================生产了24====================生产了25====================生产了26====================生产了27====================生产了28====================生产了29个
第97个买主买了茶;卖了第24袋茶叶
第96个买主买了茶;卖了第25袋茶叶
第94个买主买了茶;卖了第26袋茶叶
第95个买主买了茶;卖了第27袋茶叶
第92个买主买了茶;卖了第28袋茶叶
第93个买主买了茶;卖了第29袋茶叶
====================生产了30====================生产了31====================生产了32====================生产了33====================生产了34====================生产了35个
第91个买主买了茶;卖了第30袋茶叶
第90个买主买了茶;卖了第31袋茶叶
第89个买主买了茶;卖了第32袋茶叶
第88个买主买了茶;卖了第33袋茶叶
第87个买主买了茶;卖了第34袋茶叶
第86个买主买了茶;卖了第35袋茶叶
====================生产了36====================生产了37====================生产了38====================生产了39====================生产了40====================生产了41个
第85个买主买了茶;卖了第36袋茶叶
第84个买主买了茶;卖了第37袋茶叶
第83个买主买了茶;卖了第38袋茶叶
第82个买主买了茶;卖了第39袋茶叶
第80个买主买了茶;卖了第40袋茶叶
第81个买主买了茶;卖了第41袋茶叶
====================生产了42====================生产了43====================生产了44====================生产了45====================生产了46====================生产了47个
第79个买主买了茶;卖了第42袋茶叶
第78个买主买了茶;卖了第43袋茶叶
第77个买主买了茶;卖了第44袋茶叶
第76个买主买了茶;卖了第45袋茶叶
第75个买主买了茶;卖了第46袋茶叶
第74个买主买了茶;卖了第47袋茶叶
====================生产了48====================生产了49====================生产了50====================生产了51====================生产了52====================生产了53个
第73个买主买了茶;卖了第48袋茶叶
第72个买主买了茶;卖了第49袋茶叶
第71个买主买了茶;卖了第50袋茶叶
第70个买主买了茶;卖了第51袋茶叶
第69个买主买了茶;卖了第52袋茶叶
第68个买主买了茶;卖了第53袋茶叶
====================生产了54====================生产了55====================生产了56====================生产了57====================生产了58====================生产了59个
第67个买主买了茶;卖了第54袋茶叶
第66个买主买了茶;卖了第55袋茶叶
第65个买主买了茶;卖了第56袋茶叶
第64个买主买了茶;卖了第57袋茶叶
第63个买主买了茶;卖了第58袋茶叶
第62个买主买了茶;卖了第59袋茶叶
====================生产了60====================生产了61====================生产了62====================生产了63====================生产了64====================生产了65个
第61个买主买了茶;卖了第60袋茶叶
第45个买主买了茶;卖了第61袋茶叶
第52个买主买了茶;卖了第62袋茶叶
第58个买主买了茶;卖了第63袋茶叶
第57个买主买了茶;卖了第64袋茶叶
第56个买主买了茶;卖了第65袋茶叶
====================生产了66====================生产了67====================生产了68====================生产了69====================生产了70====================生产了71个
第55个买主买了茶;卖了第66袋茶叶
第54个买主买了茶;卖了第67袋茶叶
第60个买主买了茶;卖了第68袋茶叶
第59个买主买了茶;卖了第69袋茶叶
第51个买主买了茶;卖了第70袋茶叶
第50个买主买了茶;卖了第71袋茶叶
====================生产了72====================生产了73====================生产了74====================生产了75====================生产了76====================生产了77个
第49个买主买了茶;卖了第72袋茶叶
第48个买主买了茶;卖了第73袋茶叶
第47个买主买了茶;卖了第74袋茶叶
第46个买主买了茶;卖了第75袋茶叶
第53个买主买了茶;卖了第76袋茶叶
第44个买主买了茶;卖了第77袋茶叶
====================生产了78====================生产了79====================生产了80====================生产了81====================生产了82====================生产了83个
第43个买主买了茶;卖了第78袋茶叶
第42个买主买了茶;卖了第79袋茶叶
第41个买主买了茶;卖了第80袋茶叶
第40个买主买了茶;卖了第81袋茶叶
第39个买主买了茶;卖了第82袋茶叶
第38个买主买了茶;卖了第83袋茶叶
====================生产了84====================生产了85====================生产了86====================生产了87====================生产了88====================生产了89个
第37个买主买了茶;卖了第84袋茶叶
第36个买主买了茶;卖了第85袋茶叶
第35个买主买了茶;卖了第86袋茶叶
第34个买主买了茶;卖了第87袋茶叶
第33个买主买了茶;卖了第88袋茶叶
第32个买主买了茶;卖了第89袋茶叶
====================生产了90====================生产了91====================生产了92====================生产了93====================生产了94====================生产了95个
第31个买主买了茶;卖了第90袋茶叶
第30个买主买了茶;卖了第91袋茶叶
第29个买主买了茶;卖了第92袋茶叶
第18个买主买了茶;卖了第93袋茶叶
第27个买主买了茶;卖了第94袋茶叶
第26个买主买了茶;卖了第95袋茶叶
====================生产了96====================生产了97====================生产了98====================生产了99====================生产了100个
已经生产了100个  不卖了  只卖100个!!!!!!!!!!!!!!!!!!!!
第25个买主买了茶;卖了第96袋茶叶
第24个买主买了茶;卖了第97袋茶叶
第23个买主买了茶;卖了第98袋茶叶
第22个买主买了茶;卖了第99袋茶叶
第21个买主买了茶;卖了第100袋茶叶
沒有了  今天不卖了第12个买主没有买到
沒有了  今天不卖了第19个买主没有买到
沒有了  今天不卖了第28个买主没有买到
沒有了  今天不卖了第17个买主没有买到
沒有了  今天不卖了第16个买主没有买到
沒有了  今天不卖了第15个买主没有买到
沒有了  今天不卖了第14个买主没有买到
沒有了  今天不卖了第13个买主没有买到
沒有了  今天不卖了第20个买主没有买到
沒有了  今天不卖了第11个买主没有买到
沒有了  今天不卖了第10个买主没有买到
沒有了  今天不卖了第9个买主没有买到
沒有了  今天不卖了第8个买主没有买到
沒有了  今天不卖了第7个买主没有买到
沒有了  今天不卖了第6个买主没有买到
沒有了  今天不卖了第5个买主没有买到
沒有了  今天不卖了第4个买主没有买到
沒有了  今天不卖了第3个买主没有买到
沒有了  今天不卖了第2个买主没有买到
沒有了  今天不卖了第1个买主没有买到

Process finished with exit code 0

看执行结果应该是没有问题的,如果有问题希望和大家一起讨论,本人也在学习中,有错误希望指正,感谢!!!!!!!!!!!!!!!
使用**ReentrantLock+Condition实现的单个生产者多个消费者模式**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值