开发者社区> 问答> 正文

如何使用BlockingQueue实现producer-consumer 问题

请使用Java写出具体代码。

展开
收起
YDYK 2020-04-24 16:22:41 387 0
1 条回答
写回答
取消 提交回答
  •       
    import java.util.concurrent.BlockingQueue;  
    import java.util.concurrent.LinkedBlockingQueue;  
    import java.util.logging.Level;  
    import java.util.logging.Logger;  
    public class ProducerConsumerProblem {  
        public static void main(String args[]){  
         //Creating shared object  
         BlockingQueue sharedQueue = new LinkedBlockingQueue();  
      
         //Creating Producer and Consumer Thread  
         Thread prod = new Thread(new Producer(sharedQueue));  
         Thread cons = new Thread(new Consumer(sharedQueue));  
      
         //Starting producer and Consumer thread  
         prod.start();  
         cons.start();  
        }  
       
    }  
      
    //Producer Class in java  
    class Producer implements Runnable {  
      
        private final BlockingQueue sharedQueue;  
      
        public Producer(BlockingQueue sharedQueue) {  
            this.sharedQueue = sharedQueue;  
        }  
      
        @Override  
        public void run() {  
            for(int i=0; i<10; i++){  
                try {  
                    System.out.println("Produced: " + i);  
                    sharedQueue.put(i);  
                } catch (InterruptedException ex) {  
                    Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex);  
                }  
            }  
        }  
      
    }  
      
    //Consumer Class in Java  
    class Consumer implements Runnable{  
      
        private final BlockingQueue sharedQueue;  
      
        public Consumer (BlockingQueue sharedQueue) {  
            this.sharedQueue = sharedQueue;  
        }  
        
        @Override  
        public void run() {  
            while(true){  
                try {  
                    System.out.println("Consumed: "+ sharedQueue.take());  
                } catch (InterruptedException ex) {  
                    Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);  
                }  
            }  
        }  
    }  
    
    2020-04-24 16:23:05
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Apache RocketMQ Past, Now and Future - waterproof-ilovepdf 立即下载
消息队列kafka介绍 立即下载
低代码开发师(初级)实战教程 立即下载