栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Java实现生产者消费者的PV操作信号量操作

Java实现生产者消费者的PV操作信号量操作

目录

信号量

生产者

消费者

单元测试

Java信号量测试


定义一个信号量对象,同时定义生产者和消费者,让生产者和消费者互相等待。生产者每次生产一个对象放入队列,通知消费者消费;消费者每次只消费一个队列对象数据,消费完再通知生产者生产。

信号量

信号量就是一个能够进入消费和生产的标志。

public class Signal {

    
    public static final int times = 100;

    
    public static AtomicInteger signal = new AtomicInteger(0);

    
    public static linkedBlockingDeque queue = new linkedBlockingDeque();
}

生产者
@Data
@Slf4j
public class Producer implements Runnable{

    public Producer() {
    }

    int count = 0;

    @Override
    public void run() {
        while (count < Signal.times){
            // 生产条件
            if(Signal.signal.get() >= 0 && Signal.queue.size() == 0){
                try {
                    synchronized (Signal.signal){
                        // P操作-1
                        log.info("生产者: P操作 -1 ");
                        Signal.signal.incrementAndGet();
                        log.info("生产者: 生产,放入一个对象");
                        Signal.queue.add(new Object());
                        count ++;
                        // V操作+1
                        log.info("生产者: V操作 +1 ");
                        Signal.signal.decrementAndGet();
                        log.info("生产者: 通知消费者,生产者阻塞");
                        Signal.signal.notifyAll();
                        // 阻塞
                        Signal.signal.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                // 等待
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

消费者
@Data
@Slf4j
public class Consumer implements Runnable{
    int count = 0;

    public Consumer() {
    }

    @Override
    public void run() {
        while (count < Signal.times){
            // 生产条件
            if(Signal.signal.get() <= 0 && Signal.queue.size() > 0){
                try {
                    synchronized (Signal.signal){
                        // P操作-1
                        log.info("消费者: P操作 -1 ");
                        Signal.signal.decrementAndGet();
                        log.info("消费者: 消费,拿走一个对象");
                        Signal.queue.poll();
                        count ++;
                        // V操作+1
                        log.info("消费者: V操作 +1 ");
                        Signal.signal.incrementAndGet();
                        log.info("消费者: 通知生产者,消费者阻塞");
                        Signal.signal.notifyAll();
                        // 阻塞
                        Signal.signal.wait();
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                // 等待
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

单元测试
@Slf4j
public class PVTests {

    @Test
    public void test(){
        Producer producer = new Producer();
        Consumer consumer = new Consumer();

        new Thread(producer).start();
        new Thread(consumer).start();

        try {
            Thread.sleep(10000);
            log.info("producer: count = {}",producer.getCount());
            log.info("consumer:count = {}",consumer.getCount());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出结果:

"C:Program FilesJavajdk1.8.0_291binjava.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:63700,suspend=y,server=n -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:UsersboonyaAppDataLocalJetBrainsIntelliJIdea2021.2captureAgentdebugger-agent.jar -Dfile.encoding=UTF-8 -classpath "E:Program FilesJetBrainsIntelliJ IDEA 2021.2.3libidea_rt.jar;E:Program FilesJetBrainsIntelliJ IDEA 2021.2.3pluginsjunitlibjunit5-rt.jar;E:Program FilesJetBrainsIntelliJ IDEA 2021.2.3pluginsjunitlibjunit-rt.jar;C:Program FilesJavajdk1.8.0_291jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_291jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_291jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_291jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_291jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_291jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_291jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_291jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_291jrelibextnashorn.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_291jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_291jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_291jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_291jrelibjce.jar;C:Program FilesJavajdk1.8.0_291jrelibjfr.jar;C:Program FilesJavajdk1.8.0_291jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_291jrelibjsse.jar;C:Program FilesJavajdk1.8.0_291jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_291jrelibplugin.jar;C:Program FilesJavajdk1.8.0_291jrelibresources.jar;C:Program FilesJavajdk1.8.0_291jrelibrt.jar;F:lwjCodetesttargettest-classes;F:lwjCodetesttargetclasses;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter-web2.3.5.RELEASEspring-boot-starter-web-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter2.3.5.RELEASEspring-boot-starter-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot2.3.5.RELEASEspring-boot-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-autoconfigure2.3.5.RELEASEspring-boot-autoconfigure-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter-logging2.3.5.RELEASEspring-boot-starter-logging-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorychqoslogbacklogback-classic1.2.3logback-classic-1.2.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorychqoslogbacklogback-core1.2.3logback-core-1.2.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgapachelogginglog4jlog4j-to-slf4j2.13.3log4j-to-slf4j-2.13.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgapachelogginglog4jlog4j-api2.13.3log4j-api-2.13.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgslf4jjul-to-slf4j1.7.30jul-to-slf4j-1.7.30.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryjakartaannotationjakarta.annotation-api1.3.5jakarta.annotation-api-1.3.5.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgyamlsnakeyaml1.26snakeyaml-1.26.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter-json2.3.5.RELEASEspring-boot-starter-json-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksoncorejackson-databind2.11.3jackson-databind-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksoncorejackson-annotations2.11.3jackson-annotations-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksoncorejackson-core2.11.3jackson-core-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksondatatypejackson-datatype-jdk82.11.3jackson-datatype-jdk8-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksondatatypejackson-datatype-jsr3102.11.3jackson-datatype-jsr310-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomfasterxmljacksonmodulejackson-module-parameter-names2.11.3jackson-module-parameter-names-2.11.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter-tomcat2.3.5.RELEASEspring-boot-starter-tomcat-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgapachetomcatembedtomcat-embed-core9.0.39tomcat-embed-core-9.0.39.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgglassfishjakarta.el3.0.3jakarta.el-3.0.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgapachetomcatembedtomcat-embed-websocket9.0.39tomcat-embed-websocket-9.0.39.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-web5.2.10.RELEASEspring-web-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-beans5.2.10.RELEASEspring-beans-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-webmvc5.2.10.RELEASEspring-webmvc-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-aop5.2.10.RELEASEspring-aop-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-context5.2.10.RELEASEspring-context-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-expression5.2.10.RELEASEspring-expression-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-starter-test2.3.5.RELEASEspring-boot-starter-test-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-test2.3.5.RELEASEspring-boot-test-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkbootspring-boot-test-autoconfigure2.3.5.RELEASEspring-boot-test-autoconfigure-2.3.5.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomjaywayjsonpathjson-path2.4.0json-path-2.4.0.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorynetminidevjson-smart2.3json-smart-2.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorynetminidevaccessors-smart1.2accessors-smart-1.2.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgow2asmasm5.0.4asm-5.0.4.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgslf4jslf4j-api1.7.30slf4j-api-1.7.30.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryjakartaxmlbindjakarta.xml.bind-api2.3.3jakarta.xml.bind-api-2.3.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryjakartaactivationjakarta.activation-api1.2.2jakarta.activation-api-1.2.2.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgassertjassertj-core3.16.1assertj-core-3.16.1.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorghamcresthamcrest2.2hamcrest-2.2.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitjupiterjunit-jupiter5.6.3junit-jupiter-5.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitjupiterjunit-jupiter-api5.6.3junit-jupiter-api-5.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgopentest4jopentest4j1.2.0opentest4j-1.2.0.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitplatformjunit-platform-commons1.6.3junit-platform-commons-1.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitjupiterjunit-jupiter-params5.6.3junit-jupiter-params-5.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitjupiterjunit-jupiter-engine5.6.3junit-jupiter-engine-5.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitvintagejunit-vintage-engine5.6.3junit-vintage-engine-5.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgapiguardianapiguardian-api1.1.0apiguardian-api-1.1.0.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgjunitplatformjunit-platform-engine1.6.3junit-platform-engine-1.6.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryjunitjunit4.13.1junit-4.13.1.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgmockitomockito-core3.3.3mockito-core-3.3.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorynetbytebuddybyte-buddy1.10.17byte-buddy-1.10.17.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorynetbytebuddybyte-buddy-agent1.10.17byte-buddy-agent-1.10.17.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgobjenesisobjenesis2.6objenesis-2.6.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgmockitomockito-junit-jupiter3.3.3mockito-junit-jupiter-3.3.3.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgskyscreamerjsonassert1.5.0jsonassert-1.5.0.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositorycomvaadinexternalgoogleandroid-json.0.20131108.vaadin1android-json-0.0.20131108.vaadin1.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-core5.2.10.RELEASEspring-core-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-jcl5.2.10.RELEASEspring-jcl-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgspringframeworkspring-test5.2.10.RELEASEspring-test-5.2.10.RELEASE.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgxmlunitxmlunit-core2.7.0xmlunit-core-2.7.0.jar;D:DEVELOPERSMAVENapache-maven-3.5.0repositoryorgprojectlomboklombok1.18.22lombok-1.18.22.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.example.test.PVTests
Connected to the target VM, address: '127.0.0.1:63700', transport: 'socket'
16:14:18.444 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.448 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.448 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.448 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.461 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.461 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.462 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.462 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.463 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.463 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.464 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.464 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.465 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.465 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.466 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.466 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.467 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.467 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.468 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.468 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.468 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.468 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.468 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.468 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.468 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.469 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.469 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.470 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.470 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.471 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.471 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.472 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.472 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.473 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.473 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.474 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.474 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.475 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.475 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.476 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: P操作 -1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 生产,放入一个对象
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: V操作 +1 
16:14:18.477 [Thread-0] INFO com.boonya.code.pv.Producer - 生产者: 通知消费者,生产者阻塞
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: P操作 -1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 消费,拿走一个对象
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: V操作 +1 
16:14:18.477 [Thread-1] INFO com.boonya.code.pv.Consumer - 消费者: 通知生产者,消费者阻塞
16:14:28.445 [main] INFO com.example.test.PVTests - producer: count = 100
16:14:28.447 [main] INFO com.example.test.PVTests - consumer:count = 100
Disconnected from the target VM, address: '127.0.0.1:63700', transport: 'socket'

Process finished with exit code 0

Java信号量测试
@Slf4j
public class SemaphoreTest {

    
    Semaphore noFairSemaphore = new Semaphore(5);

    
    Semaphore fairSemaphore = new Semaphore(5,true);

    
    private class NoFairAddThread implements Runnable{

        AtomicInteger count;

        public NoFairAddThread(AtomicInteger count){
            this.count = count;
        }

        @Override
        public void run() {
            try {
                noFairSemaphore.acquire();
                count.incrementAndGet();
                noFairSemaphore.release();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                log.info("count = {}",count.get());
            }
        }
    }

    
    private class FairAddThread implements Runnable{

        AtomicInteger count;

        public FairAddThread(AtomicInteger count){
            this.count = count;
        }

        @Override
        public void run() {
            try {
                fairSemaphore.acquire();
                count.incrementAndGet();
                fairSemaphore.release();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }finally {
                log.info("count = {}",count.get());
            }
        }
    }

    @Test
    public void noFairAddThread(){
        AtomicInteger count = new AtomicInteger(0);
        for (int i = 0; i < 10; i++) {
            new Thread(new NoFairAddThread(count)).start();
        }
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("final count = {}",count.get());
    }

    @Test
    public void fairAddThread(){
        AtomicInteger count = new AtomicInteger(0);
        for (int i = 0; i < 10; i++) {
            new Thread(new FairAddThread(count)).start();
        }
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        log.info("final count = {}",count.get());
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号