zoukankan      html  css  js  c++  java
  • 生产者消费者【其他模式】

    生产者消费者【其他模式】

    public class ProducerConsumer {
        /**
         * Producer Consumer Pattern【生产者消费者模式】:
         *  将生产者应用与消费者应用解耦,生产者和消费者能够以不同的速率进行工作。
         */
        @Test
        public void all() throws InterruptedException {
            final ExecutorService threadPool = Executors.newFixedThreadPool(5);
            final BlockingQueue<String> itemQueue = new ArrayBlockingQueue<>(1);
            for (int i = 0; i < 3; i++) {
                threadPool.submit(() -> new Consumer(itemQueue).run());
            }
            for (int i = 0; i < 2; i++) {
                threadPool.submit(() -> new Producer(itemQueue).run());
            }
            threadPool.awaitTermination(2, TimeUnit.SECONDS);
        }
    }
    
    @Slf4j
    @AllArgsConstructor
    class Consumer {
        private final BlockingQueue<String> sharedItemQueue;
    
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    final String item = sharedItemQueue.take();
                    log.info("{} consume {}", Thread.currentThread().getName(), item);
                }
            } catch (final InterruptedException e) {
                log.error("", e);
            }
        }
    }
    
    @Slf4j
    @AllArgsConstructor
    class Producer {
        private final BlockingQueue<String> sharedItemQueue;
        private static final AtomicInteger COUNT = new AtomicInteger();
    
        public void run() {
            try {
                while (!Thread.interrupted()) {
                    final String item = Thread.currentThread().getName() + COUNT.incrementAndGet();
                    log.info("{} produce {}", Thread.currentThread().getName(), item);
                    sharedItemQueue.put(item);
                }
            } catch (final InterruptedException e) {
                log.error("", e);
            }
        }
    }
    
  • 相关阅读:
    node.js 的简单介绍
    vue浅析
    rest_framework的分页器组件配置与使用
    restframwork组件的权限认证
    关于and和or的运算
    restframwork组件的使用
    实现简单的子页面传值给父页面
    Django使用orm模块时想看多对对数据关系的配置
    Django更新数据库表时无法执行表修改 指定Django要使用的数据库
    图论-kruskal算法-稀疏图
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10211236.html
Copyright © 2011-2022 走看看