`
lijunaccp
  • 浏览: 153157 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

BlockingQueue阻塞队列的例子

 
阅读更多
package com.test;

import java.util.Random;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class BlockingQueueTest
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		ExecutorService pool = Executors.newCachedThreadPool();

		final BlockingQueue bq = new ArrayBlockingQueue(3);

		for (int i = 0; i < 2; i++)
		{
			pool.execute(new Runnable()
			{
				public void run()
				{
					try
					{
						while (true)
						{
							Thread.sleep(new Random().nextInt(1000));
							System.out.println(Thread.currentThread().getName()
									+ "准备放数据");
							bq.put(1);
							System.out.println(Thread.currentThread().getName()
									+ "已经放完数据,目前队列有"+bq.size()+"个数据");
						}
					}
					catch (InterruptedException e)
					{
						e.printStackTrace();
					}
				}
			});
		}
		
		pool.execute(new Runnable()
		{
			public void run()
			{
				try
				{
					while (true)
					{
						Thread.sleep(100);
						System.out.println(Thread.currentThread().getName()
								+ "准备取数据");
						bq.take();
						System.out.println(Thread.currentThread().getName()
								+ "已经取走数据,目前队列有"+bq.size()+"个数据");
					}
				}
				catch (InterruptedException e)
				{
					e.printStackTrace();
				}
			}
		});
	}

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics