zoukankan      html  css  js  c++  java
  • 多线程09.生产者消费者网络版

    package com.wangwenjun.concurrency.chapter9;
    
    import java.util.stream.Stream;
    
    public class ProduceConsumerVersion3 {
    
        private int i = 0;
    
        final private Object LOCK = new Object();
    
        private volatile boolean isProduced = false;
    
        public void produce() {
            synchronized (LOCK) {
                while (isProduced) {
                    try {
                        LOCK.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
    
                i++;
                System.out.println("P->" + i);
                LOCK.notifyAll();
                isProduced = true;
    
            }
        }
    
        public void consume() {
            synchronized (LOCK) {
                while (!isProduced) {
                    try {
                        LOCK.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("C->" + i);
                LOCK.notifyAll();
                isProduced = false;
            }
        }
    
        public static void main(String[] args) {
            ProduceConsumerVersion3 pc = new ProduceConsumerVersion3();
            Stream.of("P1", "P2", "P3").forEach(n ->
                    new Thread(n) {
                        @Override
                        public void run() {
                            while (true) {
                                pc.produce();
                                try {
                                    Thread.sleep(10);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }.start()
            );
            Stream.of("C1", "C2", "C3", "C4").forEach(n ->
                    new Thread(n) {
                        @Override
                        public void run() {
                            while (true) {
                                pc.consume();
                                try {
                                    Thread.sleep(10);
                                } catch (InterruptedException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }.start()
            );
        }
    }
  • 相关阅读:
    解决:Android 8.0检测不到当前的activity
    flask学习(十三):过滤器
    打开相册上传图片
    完整的项目
    解决ScrollView滑动RecyclerView的卡顿
    RxJava
    CoordinatorLayout
    NestedScrollView,RecyclerView
    ViewPageIndicator
    RxJava的实现原理
  • 原文地址:https://www.cnblogs.com/q1359720840/p/10656400.html
Copyright © 2011-2022 走看看