zoukankan      html  css  js  c++  java
  • LinkedBlockingQueue多线程测试

    public class FillQueueThread extends Thread {
    	private Queue queue;
    	public FillQueueThread(Queue queue){
    		this.queue = queue;
    	}
    	@Override
    	public void run() {
    		while(true){
    			try {
    				boolean added = queue.offer(UUID.randomUUID().toString());
    				if(added) {
    					System.out.println(Thread.currentThread().getName()+" add 1 element");
    				}else{
    					System.out.println(Thread.currentThread().getName()+" is blocked, wait");
    					//this.wait(); //no need to invoked wait
    				}
    				Thread.sleep(100);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	
    }	


    public class PollQueueThread extends Thread {
    	private Queue queue;
    	public PollQueueThread(Queue queue){
    		this.queue = queue;
    	}
    	@Override
    	public void run() {
    		while(true){
    			try {
    				Object el = queue.poll();
    				if(null == el){
    					System.out.println(Thread.currentThread().getName()+" is blocked, wait");
    					//this.wait(); //no need to invoked wait
    				}else{
    					System.out.println(Thread.currentThread().getName()+" pool 1 element");
    				}
    				Thread.sleep(50);
    			} catch (InterruptedException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    	
    }

    public class MonitorQueueThread extends Thread {
    	private Queue queue;
    	public MonitorQueueThread(Queue queue){
    		this.queue = queue;
    	}
    	@Override
    	public void run() {
    		while(true){
    			System.err.println("queue size:"+queue.size());
    			try {
    				Thread.sleep(500);
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    	
    }

    public class HelloQueue {
    
    	public static void main(String[] args) {
    		//ArrayBlockingQueue<String> queue = new ArrayBlockingQueue<String>(500,true);
    		LinkedBlockingQueue<String> queue = new LinkedBlockingQueue<String>(500);
    		int threadFillNumber = 10;
    		int threadPollNumber = 3;
    		for(int i=0; i<threadFillNumber; i++){
    			FillQueueThread th = new FillQueueThread(queue);
    			th.start();
    		}
    		for(int i=0; i<threadPollNumber; i++){
    			PollQueueThread th = new PollQueueThread(queue);
    			th.start();
    		}
    		
    		MonitorQueueThread monitor = new MonitorQueueThread(queue);
    		monitor.start();
    	}
    
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    uva 11729 Commando War
    剑指offer 38 数字在排序数组中出现的次数
    剑指offer 35 第一个只出现一次的字符
    剑指offer 33 把数组排成最小的数
    剑指offer17 合并两个排序的链表
    跳台阶
    app上线
    剑指offer54 表示数值的字符串
    剑指offer49 把字符串转换成整数
    段错误
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4750181.html
Copyright © 2011-2022 走看看