zoukankan      html  css  js  c++  java
  • Java完成生产者消费者模型

    生产者和消费者模型,是多线程中的典型模型,这里使用Java完成该模型

    ServerTest.java 生产者代码

    package com.orange.threadmodel;
    
    import java.util.Queue;
    
    public class ServerTest implements Runnable{
    
        private Queue<String> queue;
        
        public ServerTest(Queue<String> queue){
            this.queue = queue;
        }
            
        @Override
        public void run() {
            while(true){
                try{
                    if(queue.size() < 10){
                        System.out.println("生成商品......");
                        queue.offer("String-->");
                        Thread.sleep(1000);
                    }else{
                        System.out.println("无法生成商品,库存满了");
                        Thread.sleep(3000);
                    }
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
        }        
    }

    ClientTest.java 消费者代码

    package com.orange.threadmodel;
    
    import java.util.Queue;
    
    public class ClientTest implements Runnable{
    
        private Queue<String> queue;
        
        public ClientTest(Queue<String> queue){
            this.queue = queue;
        }
        
        @Override
        public void run() {
                while(true){
                    try{
                        if(queue.isEmpty()){
                            System.out.println("商品消费完了,无法再消费......");
                            Thread.sleep(10000);
                        }else{
                            System.out.println("消费商品......");
                            queue.poll();
                            Thread.sleep(20000);
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            }
    }

    ModelClient.java 测试模型代码

    package com.orange.threadmodel;
    
    import java.util.Queue;
    import java.util.concurrent.ArrayBlockingQueue;
    
    public class ModelClient {
    
        private static Queue<String> queue = new ArrayBlockingQueue<String>(10);
        
        public static void main(String[] args){
            ServerTest st = new ServerTest(queue);
            ClientTest ct = new ClientTest(queue);
            Thread t1 = new Thread(st);
            Thread t2 = new Thread(ct);
            t1.start();
            t2.start();
        }
        
    }

    测试结果:

  • 相关阅读:
    像素图生成向量图的算法
    黑白图着色(转换成彩色图片)的算法
    JavaScript的DOM编程--12--innerHTML属性
    JavaScript的DOM编程--11--插入节点
    JavaScript的DOM编程--10--删除节点
    JavaScript的DOM编程--09--节点的替换
    js中return、return true、return false的区别
    JavaScript的DOM编程--08--复习
    JavaScript的DOM编程--07--节点的属性
    JavaScript的DOM编程--06--两个实验
  • 原文地址:https://www.cnblogs.com/djoker/p/6531533.html
Copyright © 2011-2022 走看看