- 代码如下
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实现的单个生产者多个消费者模式**