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

避坑指南:Qwen2.5-VL图片预处理中常见的5个尺寸错误 本文深入解析了Qwen2.5-VL模型在图片预处理环节中开发者最常遇到的五个尺寸错误,包括动态分辨率对齐、宽高比超标、像素数限制等问题。文章结合源码解读,详细剖析了`process_vision_info`函数和`resize`逻辑,并提供了具体的排查流程图与参数设置建议,旨在帮助开发者构建健壮的预处理流水线,有效规避显存溢出与推理失败的风险。 阅读详情
  • 代码如下
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实现的单个生产者多个消费者模式**

飞书应用开发脚手架lark-harness:从零构建企业级机器人 在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes 阅读详情

相关推荐

优快云余额充值前必读:这5个隐藏条款,90%的开发者都忽略了(附iOS内购避坑指南)

本文揭示了优快云余额充值中90%开发者忽略的5个隐藏条款,包括不可退款规则、iOS内购限制、账号安全责任等关键内容,特别提供了iOS内购避坑指南,帮助开发者避免资金损失和账号风险。

weixin_26765287的博客 146

使用ReentrantLock和Condition实现生产者消费者

package mashibing; /** * 生产者消费者 */ import java.util.LinkedList; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java...

weiboKDhuo的博客 287

PyQtWebEngine安装避坑指南:快速解决ModuleNotFoundError

本文详细解析了PyQt5开发中常见的ModuleNotFoundError: No module named 'PyQt5.QtWebEngineWidgets'错误。核心原因是PyQt5 5.11版本后,网页引擎组件被独立为PyQtWebEngine包。文章对比了退回旧版本、独立安装及使用Conda等多种解决方案,并提供了针对Windows、macOS和Linux不同平台的实战安装指南与验证方法,帮助开发者快速解决依赖问题。

weixin_29056101的博客 427

JAVA(五)ReentrantLock(重入锁)+Condition 生产者消费者模型

重点:ReentrantLock+Condition,await、signal方法 VS synchronized+Object的wait、notify 1. ReentrantLock对比snchronized ReentrantLock支持公平锁和非公平锁、可中断。 // 非公平锁(默认) final ReentrantLock lock = new ReentrantLock();...

muer_123的博客 545

银河飞腾FT-M6678 DSP开发初体验:从仿真器连接到第一个网络程序(CCS5.5+FT-EMU560实战)

本文详细介绍了银河飞腾FT-M6678 DSP开发环境的搭建过程,包括CCS5.5开发环境的配置、FT-EMU560仿真器的连接与设置,以及关键模块如网络驱动的国产化替换。通过实战案例,帮助开发者快速掌握国产DSP的开发流程,实现网络通信功能。

weixin_30919429的博客 553

扩增子分析|溯源分析在R中的复现:跟着Nature系列文章利用FEAST溯源分析包追溯微生物群落的起源

溯源分析由Liat Shenhav等人在2019年发表在Nature Methods杂志,他们开创的一种分析微生物群落组成结构的方法,通过量化不同微生物样本(来源)在目标微生物群落(汇)中的比例或分数识别微生物群落的潜在来源。该方法自发表以来受到微生物学界广泛关注,该论文截止2024年10月9日已经被引289次,是领域内高被引论文,该方法已经成为Nature,cell系列文章高度关注的方法。

weixin_46814750的博客 3433

Java并发编程(11)-使用ReentrantLock与Condition实现生产者-消费者队列

Condition在Java并发编程中是一个十分常用的接口,被称为条件变量,常与显式锁和可重入锁一起使用,它可以在某些条件下使线程进行休眠或者唤醒,本文将以实现生产者-消费者模式的队列作为demo让大家对条件变量 有初步的了解。

BoringError的博客 1048

Apache Doris集群IP变更急救指南:用Docker容器+priority_networks快速恢复FE/BE节点

本文详细介绍了Apache Doris集群在IP变更情况下的应急处理方案,通过Docker容器和priority_networks配置快速恢复FE/BE节点。文章提供了从容器化环境构建、元数据迁移到生产环境切换的全流程指南,帮助运维团队在30分钟内完成集群恢复,显著减少停机时间。

pink7的博客 114

ReentrantLock和Condition 实现生产者 运输者 消费者

生产者、运输者、消费者 三个线程协作 使用公平锁实现, Condition 条件限制。 /** * 三个线程,一个生产商 A 一个中间商B 一个消费者C * 生产商 每次生产1个商品 * 中间商每次运送 2个商品 ,消费者每次消费3个商品 * 如果梳理不满足 则不运送 不消费 */ public class ThreePersionLockCondition { private final static ReentrantLock lock = new ReentrantLock(t

keep_learn的专栏 212

面向口齿不清者的语音识别新突破:用大模型拯救“听不懂”的声音

面向构音障碍患者的语音识别新突破:大语言模型显著提升识别准确率 国际语音研究团队在Interspeech 2025发表最新成果,通过将大语言模型(LLM)融入语音识别系统,显著改善了对构音障碍(dysarthria)患者语音的识别效果。研究表明: 传统语音识别(如CTC模型)对构音障碍语音的词错误率(WER)高达50-54%,Whisper模型降至38-40%。 引入LLM解码器后,BART模型将WER降至30-32%,而Whisper-Vicuna组合更将WER降低至21-26%。 关键优势:LLM能有效

帅小柏的博客 270

一分钟了解 Claude Code

在 AI 编程工具百花齐放的 2026 年,凭借其终端原生、全项目理解、自主执行的核心能力,开辟了全新赛道。它不是要替代你的 IDE 或编辑器,而是成为你最强大的终端扩展,让你在熟悉的环境中,用自然语言驱动开发,专注创意,而非琐事。

h a 6 6 6 c k 为 你解决复杂难题! 2198

ReentrantLock 配合Condition实现一个简单的生产者-消费者阻塞队列

ReentrantLock配合COndition实现一个简单的生产-消费阻塞队列

sky_sfsrew的博客 448

论文阅读:ICLR 2023 FINE-TUNING ALIGNED LANGUAGE MODELS COMPROMISES SAFETY, EVEN WHEN USERS DO NOT INTEND

对大型语言模型(LLMs)进行微调以适应特定用例通常涉及对预训练的LLMs进行进一步的定制。Meta公开发布Llama模型和OpenAI的API允许在自定义数据集上微调GPT-3.5 Turbo,也鼓励这种做法。但是,这种自定义微调与安全成本有何关联?我们注意到,尽管现有的安全对齐基础设施可以在推理时限制LLMs的有害行为,但它们并未涵盖将微调权限扩展到最终用户时的安全风险。我们的红队研究发现,即使是只有几个设计有敌意的训练示例进行微调,也可以破坏LLMs的安全对齐。

CSPhD-winston的博客 809

使用wait()和notify()方法实现生产者消费者模式

以下总结只是个人理解,如有错误,敬请指正。 一、wait()和notify()作用 wait()和notify()方法是Object类的方法,因为Object类是所有类的根类,因此所有类都有这两个方法。 当调用对象的wait()方法时会释放获取的该对象的锁。 既然是释放锁,我们首先要有锁才能释放,因此wait()方法必须在同步方法或同步代码块中才能执行即在synchronized修饰的方法...

Terisadeng的博客 4024

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

notify()方法、notifyAll()方法和wait()方法 详解

线程作为程序内部的多个执行流,相互之间是可以通讯的。线程间通讯可以通过多种方式来进行,例如:线程间可以共享变量来进行通讯,使每个线程根据共享变量的值进行操作和运算,当通过共享变量进行通讯时,通常需要引入同步控制, 线程间也可以通过 wati()、notify()和notifyAll()等方法进行通讯。 每一个类的对象的实例都有一个等待集合,当在该实例上调用wait()方法后,线程都...

夜冬的博客 5091

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java线程中的wait、notify和notifyAll解析

顾客去包子铺买包子,告知老板自身需求后,进入等待(调用wait()方法)老板处理的过程,此时顾客的状态为 WAITING,老板做好包子后,告知(调用notify()方法)顾客包子做好了。 💡线程间的通信的主要思想是生产者消费者机制。

write less , do more 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java wait()/notify() 实现生产者消费者模式

java中的多线程会涉及到线程间通信,常见的线程通信方式,例如共享变量、管道流等,这里我们要实现生产者消费者模式,也需要涉及到线程通信,不过这里我们用到了java中的wait()、notify()方法: wait():进入临界区的线程在运行到一部分后,发现进行后面的任务所需的资源还没有准备充分,所以调用wait()方法,让线程阻塞,等待资源,同时释放临界区的锁,此时线程的状态也从RUNNABLE

ZK_小小世界的专栏 6435

利用wait()和notify()实现生产者与消费者问题

生产者与消费者问题是并发编程里面的经典问题,下面用wait()和notify()来实现消费者线程和生产者线程的并发执行。    说之前先讲几个概念:    wait()与sleep()的区别:        1.首先sleep()是Thread()类的方法,而wait()是Object类的方法,包括notify(),notifyAll()都是Object类的方法        2.

南朝烟雨的博客 8589

【java线程系列】java线程系列之线程间的交互wait()/notify()/notifyAll()及生产者与消费者模型

关于线程,博主写过java线程详解基本上把java线程的基础知识都讲解到位了,但是那还远远不够,多线程的存在就是为了让多个线程去协作来完成某一具体任务,比如生产者与消费者模型,因此了解线程间的协作是非常重要的,本博客主要讲解多个线程之间使用wait()/notify()/notifyAll()来进行交互的场景。 一wait()/notify()/notifyAll(): 首先我们来看一下它们的

(* ̄︶ ̄) 2366

Java使用wait()、notify()、notifyAll()实现生产者消费者模式

前言: 1. wait()、notify()、notifyAll()三个方法不是随随便便就能用的,这三个方法一定要在同步代码块中调用的。 2. 同步代码块中的锁最好是使用临界资源,也最好使用临界资源对象的 wait()、notify()、notifyAll()。 3. 如果有多个生产者和多个消费者,那么尽量不要调用notify()、而要用notifyAll()。因为如果某一生产者使用noti...

a907691592的博客 655

用wait()和notify()实现生产者和消费者

示例代码 import java.util.Date; import java.util.LinkedList; public class Deque { //最大容量 private volatile int maxSize; //链表集合 private LinkedList<Integer> datas; public Dequ...

硅脂味咖啡的博客 923

用wait和notify/notifyAll实现生产者消费者模式

生产者消费者模式的实现方式有很多种,比如采用Condition条件变量或者利用阻塞队列来进行实现。本文将采用Object中自带的wait和notify/notifyAll方法来实现这个模式。实现代码如下: import java.util.LinkedList; public class ProducerConsumerPattern{ public static final int MA

Just Do IT 1793

线程之间的通信—wait()、notify()、notifyAll()

wait()和notify()是进行线程间通讯的两个重要的方法。 1.wait()的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”) 2.notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,...

qq_45036591的博客 1102

Java之wait和notify、生产者和消费者模式

文章目录关于Object类中的wait和notify方法生产者和消费者模式 关于Object类中的wait和notify方法 即生产者和消费者模式。 第一:wait和notify方法不是线程对象的方法,是java中任何一个java对象都有的方法,因为这两个方式是Object类中自带的。 wait方法和notify方法不是通过线程对象调用的,t.wait、t.notify都是不对的 第二:wait方法的作用? Object o = new Object; o.wait(); 表示:让正在o对象上活动的线程

大白的成长之路 1208

多线程之生产者与消费者模型、wait()、notify()和notifyAll()

一、wait()与notify() 1.wait()-痴汉方法 前面介绍的join()对wait()进行了包装 wait()就是使线程停止运行,会释放对象锁。 特点: 1)wait()会使当前线程调用该方法后进行等待,并且将该线程置入锁对象的等待队列,直到接到通知或被中断为止。 2)wait()只能在同步方法或同步代码块中调用,如果调用wait()时没有适当的锁,会抛出异常。 3)wait(...

smell201611010513的博客 473

java 多线程之 wait(),notify(),notifyAll()以及经典的生产者消费者模型

http://www.cnblogs.com/anran_guojianjun/archive/2009/04/14/1435278.html       wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每个对像都有wait(),notify(),notifyAll() 的功能.因为都个对像都有锁,锁是每个对像的基础,当然操作锁的

Mason's Blog 859
上一篇: 使用ReentrantLock+Condition实现的单个生产者多个消费者模式
下一篇: ReetrantReadWriteLock源码要点(面试必备)
烫手的砖
博客等级 码龄8年 7粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值