当前位置:首页 > 开发 > 编程语言 > 多线程 > 正文

java BlockingQueue 阻塞队列版多线程消费生产实例

发表于: 2012-05-13   作者:blackproof   来源:转载   浏览次数:
摘要: BlockingQueue为阻塞队列,它的实现形式有许多中,有固定的,链表的等等。机制都一样,让进入的线程加入等待   以下是BlockingQueue 阻塞队列版多线程消费生产实例:   public class Fetcher implements Runnable { private BlockingQueue<String> queue =

BlockingQueue为阻塞队列,它的实现形式有许多中,有固定的,链表的等等。机制都一样,让进入的线程加入等待

 

以下是BlockingQueue 阻塞队列版多线程消费生产实例:

 

public class Fetcher implements Runnable {
	
	private BlockingQueue<String> queue = null;
	
	public Fetcher(BlockingQueue<String> queue)
	{
		this.queue = queue;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		try
		{
			int i=0;
			/*while(true)
			{*/
			for(i=0;i<5;i++)
			{
				queue.put("segment-name-"+i);
				System.out.println("ThreadName : "+Thread.currentThread().getName()+"抓取完成");
				
			}
			Thread.sleep(50000);
			int j=0;
			for(j=0;j<25;j++)
			{
				queue.put("segment-name-"+(j+i));
				System.out.println("ThreadName : "+Thread.currentThread().getName()+"抓取完成");
			}
			System.out.println(Thread.currentThread().getName()+"thread--------"+(i+j));
		}
		catch (InterruptedException e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	

}

 

   生产者

 

 

 

public class Indexer implements Runnable {

	private BlockingQueue<String> queue;
	public Indexer(BlockingQueue<String> queue)
	{
		this.queue = queue;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try{
			/*while(true)
			{*/
			int i;
			for(i=0;i<10;i++)
			{
				Thread.sleep(1000);
				String name = queue.take();
				System.out.println("ThreadName : " +Thread.currentThread().getName()+ " 索引创建完成 " +name);  
			}
		}catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

}

   消费者

 

 

package com.test;

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

public class TestConsumer {
	
	private static BlockingQueue<String> queue = new ArrayBlockingQueue<String>(10);

	public static void main(String[] args)
	{
		ExecutorService service = Executors.newCachedThreadPool();
		
		Fetcher producer = new Fetcher(queue);
		Indexer consumer = new Indexer(queue);
		Indexer consumerSecond = new Indexer(queue);
		service.submit(producer);
		service.submit(consumer);
		service.submit(consumerSecond);
		
		try{
			Thread.sleep(5000);
		}
		catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
}

   主函数

 

 

 

java BlockingQueue 阻塞队列版多线程消费生产实例

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的
Java阻塞队列_BlockingQueue 以上是BlockingQueue所有的方法。。 add(anObject):把anObject加到Blo
阻塞队列:只是队列的拓展,传统队列当满的时候会抛出异常,而阻塞队列会一直等待,不会报错,当然
一个指定目录下包含某个关键字的文件,输出文件路径及行号。 同时启动两组线程,一个向队列中添加文
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPool
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPoo
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPoo
从Java5开始,Java提供了自己的线程池。每次只执行指定数量的线程,java.util.concurrent.ThreadPoo
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的
由于在项目中的一些教训,最近回顾了一下多线程,写了下面这样一个简单的实例。 多线程的重点应当在
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号