zoukankan      html  css  js  c++  java
  • 线程通讯--BlockingQueue

    Producer线程

    package com.thread.communication.blockingqueue;
    
    import java.util.concurrent.BlockingQueue;
    
    public class Producer extends Thread{
        private BlockingQueue<String> bq;
        
        public Producer(BlockingQueue<String> bq){
            this.bq=bq;
        }
        
        public void run(){
            String[] strArr = new String[]
                    {"Java","Struts","Spring"};
            for(int i=0;i<99999999;i++){
                System.out.println(getName() + "生产者准备生产集合元素");
                try{
                    Thread.sleep(200);
                    //如果传入的的bq的length是1,那么put一个值,就会出现阻塞现象
                    bq.put(strArr[i % 3]);//求余数 0 1 2
                }catch(Exception ex){
                    ex.printStackTrace();
                }
                
                System.out.println(getName()+"生产完成"+ bq);
                
            }
        }
    
    }

    Consumer线程

    package com.thread.communication.blockingqueue;
    
    import java.util.concurrent.BlockingQueue;
    
    public class Consumer extends Thread{
        private BlockingQueue<String> bq;
        public Consumer(BlockingQueue<String> bq){
            this.bq=bq;
        }
        public void run(){
            while(true){
                System.out.println(getName()+"消费者准备消费集合元素");
                try{
                    Thread.sleep(200);
                    //当bq被取空时,出现阻塞
                    bq.take();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
                System.out.println(getName()+ "消费完成"+bq);
            }
        }
    
    }

    测试类

    package com.thread.communication.blockingqueue;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.BlockingQueue;
    
    public class BlockingQueueTest {
        public static void main(String[] args){
            BlockingQueue<String> bq = new ArrayBlockingQueue<>(1);
            
            new Producer(bq).start();
            new Producer(bq).start();
            new Producer(bq).start();
            
            new Consumer(bq).start();
        }
    
    }
  • 相关阅读:
    【NOIP 2003】 加分二叉树
    【POJ 1655】 Balancing Act
    【HDU 3613】Best Reward
    【POJ 3461】 Oulipo
    【POJ 2752】 Seek the Name, Seek the Fame
    【POJ 1961】 Period
    【POJ 2406】 Power Strings
    BZOJ3028 食物(生成函数)
    BZOJ5372 PKUSC2018神仙的游戏(NTT)
    BZOJ4836 二元运算(分治FFT)
  • 原文地址:https://www.cnblogs.com/moonpool/p/5503287.html
Copyright © 2011-2022 走看看