`

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

阅读更多

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();
		}
	}
}

   主函数

 

 

 

分享到:
评论
1 楼 dacoolbaby 2012-11-14  
您的程序不是线程同步的。。
我要重写你的程序了。。

相关推荐

    java 多线程 队列工厂

    在Java编程中,多线程和队列是两个非常重要的概念,它们对于构建高效、可扩展的并发应用程序至关重要。队列工厂则是实现多线程间通信和任务调度的一种设计模式,它提供了一种抽象和统一的方式来创建和管理队列实例。...

    java 多线程并发实例

    本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是程序执行的基本单元,每个线程都有自己的程序计数器、虚拟机栈、本地方法栈,而共享堆...

    java多线程经典案例

    此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,线程可以等待队列中有数据可取或等待队列有空位可存,常用于生产者-消费者模型。 线程阻塞是指线程在运行过程中因为某些原因无法继续执行,...

    Java多线程编程实例

    本书“Java多线程编程实例”深入浅出地讲解了如何在Java环境中实现多线程操作,尽管出版时间较早,但其内容的经典性和实用性使其在现代开发中仍具有极高的参考价值。 首先,我们要理解Java中的线程是如何创建的。...

    java 中 阻塞队列BlockingQueue详解及实例

    总结来说,Java中的阻塞队列BlockingQueue是并发编程中的一种高效、线程安全的数据结构,它提供了线程间的同步和通信机制,简化了多线程环境下的编程复杂性。通过选择适当的实现类和使用适当的方法,开发者可以灵活...

    java多线程加队列上传文件_后台处理

    ### Java多线程加队列上传文件_后台处理 #### 概述 本文将详细介绍一个基于Java实现的多线程文件上传系统,并结合队列管理技术来优化后台处理流程。该系统通过创建多个线程来并行处理客户端的文件上传请求,同时...

    java中线程队列BlockingQueue的用法

    在Java编程中,`BlockingQueue`(阻塞队列)是一种重要的并发工具,它结合了队列的数据结构和线程同步机制。`BlockingQueue`接口位于`java.util.concurrent`包中,提供了线程安全的数据结构,可以用于实现生产者-...

    java多线程实现生产者消费者关系

    BlockingQueue提供了一种线程安全的队列,它内置了同步机制,使得生产者在队列满时会被阻塞,消费者在队列空时也会被阻塞,直到条件满足后才能继续执行。 以下是一个简单的基于synchronized关键字和wait/notify机制...

    JAVA实现线程间同步与互斥生产者消费者问题

    4. **BlockingQueue阻塞队列**:Java的`java.util.concurrent`包提供了`BlockingQueue`接口,它是一种特殊的队列,可以在队列满时阻塞生产者,队列空时阻塞消费者,从而自动实现线程的同步和互斥。`put()`和`take()`...

    java多线程例子-生产者消费者

    在本示例中,“java多线程例子-生产者消费者”旨在展示如何利用多线程来实现生产者和消费者模式。这种模式是并发编程中的经典设计模式,用于协调生产数据和消费数据的两个不同线程。 生产者消费者模式的基本概念是...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程编程实战指南-核心篇

    Java的BlockingQueue阻塞队列可以实现线程间的生产者-消费者模式,通过put()和take()方法实现数据的传递。此外,Phaser、CyclicBarrier和CountDownLatch等同步辅助类也是线程间协调的重要工具。 线程池是Java并发...

    java阻塞队列实现原理及实例解析.docx

    在多线程编程中,阻塞队列常用于实现生产者-消费者模型,其中生产者线程负责向队列中添加元素,消费者线程则负责消费这些元素。由于阻塞队列能自动处理线程间的同步,因此可以简化代码并提高系统的可伸缩性。此外,...

    Java使用阻塞队列控制线程通信的方法实例详解

    Java中的阻塞队列(BlockingQueue)是一种线程安全的数据结构,它在多线程环境下的生产者消费者问题中扮演着关键角色。阻塞队列的主要特点是当队列满时,生产者线程会等待,直到队列有空位;同样,当队列为空时,...

    Java多线程 生产者-消费者模式

    Java多线程中的生产者-消费者模式是一种典型的同步与协作模型,它用于解决在多线程环境下资源的有效利用和协调问题。在这个模式中,通常有两个角色:生产者和消费者。生产者负责创建产品,而消费者则负责消费这些...

    多线程间通信:多生产者-多消费者实例

    `BlockingQueue`是一种线程安全的数据结构,它实现了生产者和消费者之间的阻塞等待。当队列满时,生产者会阻塞直到有空间可以插入;同样,当队列为空时,消费者也会阻塞等待新的数据。 下面是一个简单的多生产者-多...

    java多线程中生产者与消费者问题.pdf

    【Java多线程中的生产者与消费者问题】 在Java编程中,多线程是一个关键特性,它允许多个任务在同一个程序中并发执行。在实际应用中,常常会出现一类问题,即生产者与消费者问题,这是一个典型的并发控制问题。在这...

    JAVA100例之实例64 JAVA线程间通讯

    在Java编程中,线程间通信是多线程编程中的一个重要概念。当多个线程并发执行时,有时需要在线程间传递数据或者同步执行顺序,这就涉及到线程间通信。在"JAVA100例之实例64 JAVA线程间通讯"这个主题中,我们将深入...

    java线程实例 各种小Demo

    Java 5引入了BlockingQueue阻塞队列,提供了一种更安全的线程间通信方式,如ArrayBlockingQueue、LinkedBlockingQueue等。 在"线程池.rar"和"线程实例"这两个文件中,你可以找到关于这些概念的具体示例代码,通过...

    Java中使用阻塞队列控制线程集实例

    总结来说,这个Java程序利用阻塞队列`ArrayBlockingQueue`来协调多线程间的协作,实现了高效、并发的文件搜索功能。这种设计模式在并发编程中非常常见,特别是在需要处理大量数据或者需要进行分布式计算的场景下。...

Global site tag (gtag.js) - Google Analytics