簡單的隊列處理小demo

三個類.

import java.util.concurrent.ConcurrentLinkedQueue;
/**
 * 放入隊列
 * @author dmw
 *
 * 2018年9月27日
 */
public class MyProducer {
	private ConcurrentLinkedQueue<String> queue;

	public ConcurrentLinkedQueue<String> getQueue() {
		return queue;
	}

	public void setQueue(ConcurrentLinkedQueue<String> queue) {
		this.queue = queue;
	}

	public MyProducer(ConcurrentLinkedQueue<String> queue) {
		super();
		this.queue = queue;
	}
	/**
	 * 放入方法
	 * @param val
	 */
	public void put(String val){
		queue.add(val);
	}
}

 

import java.util.concurrent.ConcurrentLinkedQueue;
/**
 * 處理隊列
 * @author dmw
 *
 * 2018年9月27日
 */
public class MyCustomer implements Runnable{
	
	private ConcurrentLinkedQueue<String> queue;

	public ConcurrentLinkedQueue<String> getQueue() {
		return queue;
	}

	public void setQueue(ConcurrentLinkedQueue<String> queue) {
		this.queue = queue;
	}

	public MyCustomer(ConcurrentLinkedQueue<String> queue) {
		super();
		this.queue = queue;
	}
	/**
	 * 處理方法
	 */
	@Override
	public void run() {
		while(true){
			String poll = queue.poll();//取出第一個並移除
			if (poll != null){
				
				System.out.println("處理了:"+poll);//處理
				
				
				System.out.println("此時容器裏還有"+queue.size()+"個");//這個size()實際上是預期值.不能作爲嚴格值
			}
			try {
				Thread.currentThread().sleep(1000);//休息一秒
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	
	
	
	
	
}

 

測試效果非常不錯.不懂的同學先運行看看.就知道怎麼回事了.

import java.util.concurrent.ConcurrentLinkedQueue;

public class Test {
	public static void main(String[] args) throws InterruptedException {

		ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<String>();
		MyProducer producer = new MyProducer(queue );
		MyCustomer customer = new MyCustomer(queue);
		
		/**
		 * 隊列預先插入3個
		 */
		producer.put("aaa");
		producer.put("bbb");
		producer.put("ccc");
		
		/**
		 * 隊列處理開始
		 */
		new Thread(customer).start();
		
		/**
		 * 先睡下
		 */
		Thread.currentThread().sleep(2000);
		
		
		/**
		 * 後續插入20條試試看
		 */
		for (int i = 100; i < 120; i++) {
			producer.put(""+i);
		}
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章