目录
定义一个信号量对象,同时定义生产者和消费者,让生产者和消费者互相等待。生产者每次生产一个对象放入队列,通知消费者消费;消费者每次只消费一个队列对象数据,消费完再通知生产者生产。
信号量
信号量就是一个能够进入消费和生产的标志。
- 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 Files\Java\jdk1.8.0_291\bin\java.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:\Users\boonya\AppData\Local\JetBrains\IntelliJIdea2021.2\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar;E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\plugins\junit\lib\junit5-rt.jar;E:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\plugins\junit\lib\junit-rt.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_291\jre\lib\rt.jar;F:\lwjCode\test\target\test-classes;F:\lwjCode\test\target\classes;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter-web\2.3.5.RELEASE\spring-boot-starter-web-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter\2.3.5.RELEASE\spring-boot-starter-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot\2.3.5.RELEASE\spring-boot-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-autoconfigure\2.3.5.RELEASE\spring-boot-autoconfigure-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter-logging\2.3.5.RELEASE\spring-boot-starter-logging-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter-json\2.3.5.RELEASE\spring-boot-starter-json-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\core\jackson-databind\2.11.3\jackson-databind-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\core\jackson-annotations\2.11.3\jackson-annotations-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\core\jackson-core\2.11.3\jackson-core-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.3\jackson-datatype-jdk8-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.3\jackson-datatype-jsr310-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.3\jackson-module-parameter-names-2.11.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter-tomcat\2.3.5.RELEASE\spring-boot-starter-tomcat-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.39\tomcat-embed-core-9.0.39.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.39\tomcat-embed-websocket-9.0.39.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-web\5.2.10.RELEASE\spring-web-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-beans\5.2.10.RELEASE\spring-beans-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-webmvc\5.2.10.RELEASE\spring-webmvc-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-aop\5.2.10.RELEASE\spring-aop-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-context\5.2.10.RELEASE\spring-context-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-expression\5.2.10.RELEASE\spring-expression-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-starter-test\2.3.5.RELEASE\spring-boot-starter-test-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-test\2.3.5.RELEASE\spring-boot-test-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.3.5.RELEASE\spring-boot-test-autoconfigure-2.3.5.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\assertj\assertj-core\3.16.1\assertj-core-3.16.1.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\jupiter\junit-jupiter\5.6.3\junit-jupiter-5.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\jupiter\junit-jupiter-api\5.6.3\junit-jupiter-api-5.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\platform\junit-platform-commons\1.6.3\junit-platform-commons-1.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\jupiter\junit-jupiter-params\5.6.3\junit-jupiter-params-5.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\jupiter\junit-jupiter-engine\5.6.3\junit-jupiter-engine-5.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\vintage\junit-vintage-engine\5.6.3\junit-vintage-engine-5.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\apiguardian\apiguardian-api\1.1.0\apiguardian-api-1.1.0.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\junit\platform\junit-platform-engine\1.6.3\junit-platform-engine-1.6.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\mockito\mockito-core\3.3.3\mockito-core-3.3.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\net\bytebuddy\byte-buddy\1.10.17\byte-buddy-1.10.17.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\net\bytebuddy\byte-buddy-agent\1.10.17\byte-buddy-agent-1.10.17.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\mockito\mockito-junit-jupiter\3.3.3\mockito-junit-jupiter-3.3.3.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-core\5.2.10.RELEASE\spring-core-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-jcl\5.2.10.RELEASE\spring-jcl-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\springframework\spring-test\5.2.10.RELEASE\spring-test-5.2.10.RELEASE.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\xmlunit\xmlunit-core\2.7.0\xmlunit-core-2.7.0.jar;D:\DEVELOPERS\MAVEN\apache-maven-3.5.0\repository\org\projectlombok\lombok\1.18.22\lombok-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信号量测试
- package com.example.test;
-
- import lombok.extern.slf4j.Slf4j;
- import org.junit.Test;
-
- import java.util.concurrent.Semaphore;
- import java.util.concurrent.atomic.AtomicInteger;
-
- /**
- * Java Semaphore 信号量测试
- * @author Pengjunlin
- * @date 2022/3/7
- */
- @Slf4j
- public class SemaphoreTest {
-
- /**
- * 非公平信号量
- */
- Semaphore noFairSemaphore = new Semaphore(5);
-
- /**
- * 公平信号量
- */
- Semaphore fairSemaphore = new Semaphore(5,true);
-
- /**
- * 非公平信号量处理加法线程【非公平信号量有多少拿多少,先到先得】
- */
- private class NoFairAddThread implements Runnable{
-
- int threadIndex = 0;
- AtomicInteger count;
-
- public NoFairAddThread(AtomicInteger count,int threadIndex){
- this.count = count;
- this.threadIndex = threadIndex;
- }
-
- @Override
- public void run() {
- if(noFairSemaphore.tryAcquire(1)){
- log.info("-noFairSemaphore--拿到许可---!{}",threadIndex);
- count.incrementAndGet();
- noFairSemaphore.release();
- }else{
- log.info("-noFairSemaphore--没有拿到许可---!{}",threadIndex);
- }
- }
- }
-
- /**
- * 公平信号量处理加法线程【公平信号量能确保都能获取到】
- */
- private class FairAddThread implements Runnable{
- int threadIndex = 0;
- AtomicInteger count;
-
- public FairAddThread(AtomicInteger count,int threadIndex){
- this.count = count;
- this.threadIndex = threadIndex;
- }
-
- @Override
- public void run() {
- if(fairSemaphore.tryAcquire(1)){
- log.info("-fairSemaphore--拿到许可---!{}",threadIndex);
- count.incrementAndGet();
- fairSemaphore.release();
- }
- }
- }
-
- @Test
- public void noFairAddThread(){
- AtomicInteger count = new AtomicInteger(0);
- for (int i = 0; i < 10; i++) {
- new Thread(new NoFairAddThread(count,i)).start();
- }
- try {
- Thread.sleep(1000);
- } 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,i)).start();
- }
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- log.info("final count = {}",count.get());
- }
- }