zoukankan      html  css  js  c++  java
  • 使用阻塞队列实现生产者和消费者问题

      BlockingQueue<E>接口定义了包括两个附加功能的队列。这两个功能是:如果从空队列中取元素或者向满队列中增加元素,则进入等待状态。BlockinQueue接口中的方法pu(e)t和take()可以使其进入无限阻塞状态,可以用这两个方法实现生产者和消费者问题,比较简单。

    代码如下:

    package com.lk.B;
    
    import java.util.Random;
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.LinkedBlockingQueue;
    
    public class Test5 {
    	private BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(2);
    	private class Producer implements Runnable{
    
    		@Override
    		public void run() {
    			// TODO Auto-generated method stub
    			for(int i=0;i<5;i++){
    				int b = new Random().nextInt(255);
    				try {
    					queue.put(b);
    					System.out.println("向队列中加入"+b+"	队列中有"+queue.size()+"个元素");
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		}
    		
    	}
    	
    	private class Consumer implements Runnable{
    
    		@Override
    		public void run() {
    			try {
    				Thread.sleep(100);
    			} catch (InterruptedException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    			// TODO Auto-generated method stub
    			for(int i=0;i<5;i++){
    				int b = 0;
    				try {
    					b=queue.take();
    					System.out.println("从队列中取出"+b+"	队列中有"+queue.size()+"个元素");
    				} catch (InterruptedException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		Test5 test5 = new Test5();
    		Producer producer = test5.new Producer();
    		Consumer consumer = test5.new Consumer();
    		new Thread(producer).start();
    		new Thread(consumer).start();
    	}
    }
    

      运行结果:

    /*
    向队列中加入127	队列中有1个元素
    向队列中加入113	队列中有2个元素
    从队列中取出127	队列中有1个元素
    向队列中加入88	        队列中有2个元素
    从队列中取出113	队列中有1个元素
    从队列中取出88	        队列中有0个元素
    向队列中加入212	队列中有1个元素
    从队列中取出212	队列中有0个元素
    向队列中加入243	队列中有1个元素
    从队列中取出243	队列中有0个元素
    */  
    

      

  • 相关阅读:
    使用select2插件并添加拼音首字母检索
    sql id 或使用nolock
    .net 开源组件
    EF 创建数据库的策略 codefist加快效率!【not oringin!】
    个人拾遗!数组的拷贝等
    编程拾遗:集合类型的函数,返回值,如果没有,就返回默认集合new,或者 default(T)好一些。
    C# datatable to list
    npoi导出excel 导出List<T>
    display:inline、block、inline-block的区别 摘】
    ie下,jquery为动态添加的节点添加事件,用live
  • 原文地址:https://www.cnblogs.com/luankun0214/p/4398821.html
Copyright © 2011-2022 走看看