Producer/Consumer threads using a Queue

前端 未结 7 1772
抹茶落季
抹茶落季 2020-11-22 17:00

I\'d like to create some sort of Producer/Consumer threading app. But I\'m not sure what the best way to implement a queue between the two.

So I\'ve so

7条回答
  •  借酒劲吻你
    2020-11-22 17:38

    1. Java code "BlockingQueue" which has synchronized put and get method.
    2. Java code "Producer" , producer thread to produce data.
    3. Java code "Consumer" , consumer thread to consume the data produced.
    4. Java code "ProducerConsumer_Main", main function to start the producer and consumer thread.

    BlockingQueue.java

    public class BlockingQueue 
    {
        int item;
        boolean available = false;
    
        public synchronized void put(int value) 
        {
            while (available == true)
            {
                try 
                {
                    wait();
                } catch (InterruptedException e) { 
                } 
            }
    
            item = value;
            available = true;
            notifyAll();
        }
    
        public synchronized int get()
        {
            while(available == false)
            {
                try
                {
                    wait();
                }
                catch(InterruptedException e){
                }
            }
    
            available = false;
            notifyAll();
            return item;
        }
    }
    

    Consumer.java

    package com.sukanya.producer_Consumer;
    
    public class Consumer extends Thread
    {
        blockingQueue queue;
        private int number;
        Consumer(BlockingQueue queue,int number)
        {
            this.queue = queue;
            this.number = number;
        }
    
        public void run()
        {
            int value = 0;
    
            for (int i = 0; i < 10; i++) 
            {
                value = queue.get();
                System.out.println("Consumer #" + this.number+ " got: " + value);
            }
        }
    }
    

    ProducerConsumer_Main.java

    package com.sukanya.producer_Consumer;
    
    public class ProducerConsumer_Main 
    {
        public static void main(String args[])
        {
            BlockingQueue queue = new BlockingQueue();
            Producer producer1 = new Producer(queue,1);
            Consumer consumer1 = new Consumer(queue,1);
            producer1.start();
            consumer1.start();
        }
    }
    

提交回复
热议问题