zoukankan      html  css  js  c++  java
  • 生产者消费者问题

    import java.util.*;
    public class ProducerConsumerTest{
        final int BUFFER_SIZE=10;//缓冲区最大值
        Queue<Integer> queue;//共享缓冲队列
        public ProducerConsumerTest(){
            queue=new LinkedList<Integer>();
        }
        public static void main(String[] args){
            ProducerConsumerTest PC=new ProducerConsumerTest();
            int count=100;
            System.out.println("开始生产消费了哦");
            while(count-->0){
                new Thread(PC.new Producer()).start();
                new Thread(PC.new Consumer()).start();
            }
            
        }
        class Consumer implements Runnable{
            @Override
            public void run() {
                synchronized(queue){
                    if(queue.size()==0){
                        try {
                            queue.wait();//释放锁
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }else{
                        int x=queue.remove();
                        System.out.println("消费 :"+x);
                        queue.notify();//唤醒生产者
                    }
                    
                }
            }
        }
        class Producer implements Runnable{
    
            @Override
            public void run() {
                synchronized(queue){
                    if(queue.size()==BUFFER_SIZE){
                        try {
                            queue.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }    
                    }else{
                        int x=queue.size()+1;
                        queue.add(x);
                        System.out.println("生产 :"+x);
                        queue.notify();
                    }
                }
            }
            
        }
        
    }

     加上Executor,BlockingQueue

    import java.util.*;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.LinkedBlockingQueue;
    import java.util.concurrent.TimeUnit;
    
    
    public class ProducerConsumerTest{
        final int BUFFER_SIZE=10;
        final String[] produce=new String[5];
        LinkedBlockingQueue<String> queue;
        public ProducerConsumerTest(){
            queue=new LinkedBlockingQueue<String>(BUFFER_SIZE);
            produce[0]="水";
            produce[1]="面包";
            produce[2]="空气";        
            produce[3]="快乐";
            produce[4]="灾难";
        }
        public static void main(String[] args) throws InterruptedException{
            ProducerConsumerTest PC=new ProducerConsumerTest();
            System.out.println("开始生产消费了哦");
            ExecutorService exec=Executors.newCachedThreadPool();
            exec.execute(new Thread(PC.new Producer()));
            TimeUnit.MILLISECONDS.sleep(1000);//先给我生产一会,好吧
            exec.execute(new Thread(PC.new Consumer()));
            exec.shutdown();
        }
        class Consumer implements Runnable{
            @Override
            public void run() {    
                while(true){
                    try {
                        String p = queue.take();
                        System.out.println("消费 :"+p);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    
                }    
            }
        }
        class Producer implements Runnable{        
            @Override
            public void run() {
                Random rand=new Random();
                int count=10000;
                while(count-->0){
                    try {
                        int x=rand.nextInt(5);
                        queue.put(produce[x]);
                        System.out.println("生产 :"+produce[x]);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
            
        }
        
    }
  • 相关阅读:
    jvm gc 线程
    高分辨率图像建筑物提取数据集制作
    Ubuntu 更改软件源
    后台程序员简单应用前端的bootstrap(小白)
    php--常见算法3
    php--常见算法2
    php--常见算法1
    php三种排序算法
    Django学习之十二:Cache 缓存组件
    Restframe_work 回顾记忆集
  • 原文地址:https://www.cnblogs.com/wqkant/p/6854148.html
Copyright © 2011-2022 走看看