zoukankan      html  css  js  c++  java
  • 快速实现一个生产者-消费者模型demo

    package jesse.test1;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    
    // 生产者
    class Producer implements Runnable{
        private BlockingQueue<String> queue;
        
        public Producer(BlockingQueue<String> queue) {
            super();
            this.queue = queue;
        }
    
        @Override
        public void run() {
            for (int i = 0; i < 20; i++) {
                try {
                    Thread.sleep(10L);
                    String msg = "msg"+i;
                    System.out.println("Produce new item: "+msg);
                    queue.put(msg);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            try {
                System.out.println("Time to say goodbye");
                queue.put(ProducerConsumerModel.EXIT_MSG);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        
    }
    
    //消费者
    class Consumer implements Runnable{
        private BlockingQueue<String> queue;
        
        public Consumer(BlockingQueue<String> queue){
            this.queue = queue;
        }
        
        @Override
        public void run() {
            try {
                String msg ;
           //取值即判断 while(!ProducerConsumerModel.EXIT_MSG.equals(msg=queue.take())){ System.out.println("Consumed item: "+ msg); Thread.sleep(15L); } System.out.println("Exit."); } catch (InterruptedException e) { e.printStackTrace(); } } } public class ProducerConsumerModel { public final static String EXIT_MSG="bye"; public static void main(String[] args) { BlockingQueue<String> queue = new ArrayBlockingQueue<String>(5); Producer producer = new Producer(queue); Consumer consumer = new Consumer(queue); new Thread(producer).start(); new Thread(consumer).start(); } }

      

  • 相关阅读:
    IDEA 非常重要的一些设置项 → 一连串的问题差点让我重新用回 Eclipse !
    分布式任务调度平台 → XXL-JOB 实战
    JAVA
    Spring boot
    WebStorm如何去掉参数提示?
    JAVA
    redis tools
    解Bug之路-Nginx 502 Bad Gateway(转发)
    Apache Drill – JDBC Interface & Custom Function
    Apache Drill – Querying Complex Data & Data Definition Statements & Querying Data
  • 原文地址:https://www.cnblogs.com/atomicbomb/p/9965145.html
Copyright © 2011-2022 走看看