zoukankan      html  css  js  c++  java
  • 多线程设计模式

    future 模式

    生产者-消费者模式

    生产者-消费者模式是一个经典的多线程设计模式。它为多线程间的协作提供了良好的解决方案。 在生产者-消费者模式中,通常由两类线程,即若干个生产者线程和若干个消费者线程。生产者线 程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务。生产者和消费者之间则通 过共享内存缓冲区进行通信。

    .生产着消费者模式特点

    1.解耦,生产者干生产者的事情,消费者干消费者的事情
    
    2.支持高并发,可以同时多个生成,多个消费,互不影响

    package com.thread.pc.blockingqueue;
    
    import java.util.UUID;
    import java.util.concurrent.BlockingQueue;
    /**
     * 仓库
     * @author yyx 2018年12月22日
     */
    public class Warehouse {
        private final int MAX_SIZE = 10;
        private BlockingQueue<Product> blockingQueue;
    
        public Warehouse(BlockingQueue<Product> blockingQueue) {
            super();
            this.blockingQueue = blockingQueue;
        }
    
        public void addProduct() {
            String currentName = Thread.currentThread().getName();
            if (blockingQueue.size() >= MAX_SIZE) {
                System.out.println("产品列表已满,不再生产!" + currentName + "进入等待");
            } else {
                Product product = new Product(UUID.randomUUID());
                System.out.println(currentName + "生产了一个产品,它的编号是:" + product.getProCode().toString());
                try {
                    blockingQueue.put(product);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void removeProduct() {
            String currentName = Thread.currentThread().getName();
            if (blockingQueue.size() <= 0) {
                System.out.println("产品列表不足,不再消费!" + currentName + "进入等待");
            } else {
                try {
                    Product product = blockingQueue.take();
                    System.out.println(currentName + "消费了一个产品,它的编号是:" + product.getProCode().toString());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
  • 相关阅读:
    507. Perfect Number
    Dos与Linux的断行字符
    724. Find Pivot Index
    110. Balanced Binary Tree
    掌握numpy(三)
    掌握numpy(二)
    掌握numpy(一)
    203. Remove Linked List Elements
    25个Java机器学习工具和库
    贝叶斯学习--极大后验概率假设和极大似然假设
  • 原文地址:https://www.cnblogs.com/dingpeng9055/p/11282214.html
Copyright © 2011-2022 走看看