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详解及实例的相关资料,需要的朋友可以参考下
BlockingQueue接口 – 阻塞队列2.1 ArrayBlockingQueue类(有界阻塞队列)2.2 LinkedBlockingQueue类(无界阻塞队列)3. 源码:BlockingQueue实现生产者消费者模式→ 输出结果截图 1. Queue接口 – 队列 public ...
java中线程队列BlockingQueue的用法
定义全局线程池,将用户的请求放入自定义队列中,排队等候线程调用,等待超时则自动取消该任务,实现超时可取消的异步任务
在新增的Concurrent包中,BlockingQueue...通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。
主要介绍了Java多线程 BlockingQueue实现生产者消费者模型详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
主要介绍了Java多线程Queue、BlockingQueue和使用BlockingQueue实现生产消费者模型方法解析,涉及queue,BlockingQueue等有关内容,具有一定参考价值,需要的朋友可以参考。
14-阻塞队列BlockingQueue实战及其原理分析二.pdf
阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列提供了四种处理方法: 抛出异常...
看完《think in java》多线程章节,自己写的多线程文档,还结合了其他的相关网络资料。 线程 一. 线程池 1)为什么要使用线程池 2 2)一个具有线程池的工作队列 3 3)使用线程池的风险: 4 4)有效使用线程池的原则 5...
10、阻塞队列BlockingQueue实战及其原理分析_
主要介绍了详解Java阻塞队列(BlockingQueue)的实现原理,阻塞队列是Java util.concurrent包下重要的数据结构,有兴趣的可以了解一下
本篇文章小编为大家介绍,基于java中BlockingQueue的使用介绍。需要的朋友参考下
Java 多线程与并发(16_26)-JUC集合_ BlockingQueue详解
在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的... 使用ArrayBlockingQueue的一个子类BlockingQueue实现一个可阻塞队列,一个线程put另一个线程take,当队列为空时take等待,当线程满时put等待
线程----BlockingQueue 的介绍说明
今天小编就为大家分享一篇关于Java多线程工具篇BlockingQueue的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本.mp4
绍Java多线程(五)之BlockingQueue深入分析