`
lihaibingqq789
  • 浏览: 19902 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

concurrent之并发编程-BlockingQueue

阅读更多

 

1.先简单介绍下java.util.concurrent中的几种常见阻塞队列

(1):BlockingQueue

 BlockingQueue有四个具体的实现类,根据不同需求,选择不同的实现类: 
 ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。 
LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue 有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO顺序排序的。
PriorityBlockingQueue:类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的Comparator决定的顺序。 
SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的。

其中的LinkedBlockingQueue和SynchronousQueue又是比较常用的。

 

下面以2个例子简单介绍,部分源码如下:

public class BlockingQueueTest {

 public static void main(String[] args) {

  final BlockingQueue<Integer> queues = new LinkedBlockingDeque<Integer>(3);

  final Random random = new Random();


  /**
   * 生产者
   * @author Administrator
   *
   */
  class Producer implements Runnable {
   public void run() {
    while (true) {
     int i = random.nextInt(100);
     // 当队列容量达到时,会自动阻塞
     try {
      queues.put(i);
      if (queues.size() == 3) {
       System.out.println("full");
      }
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }
  }

  /**
   * 消费者
   * @author Administrator
   *
   */
  class Consumer implements Runnable {
   public void run() {
    while (true) {
     try {
      // 当队列为空时,也会阻塞
      queues.take();
      Thread.sleep(3000);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
   }
  }

  new Thread(new Producer()).start();
  new Thread(new Consumer()).start();
 }
}

 

public class SynchronousQueueTest {

 class producer implements Runnable {
  
  private BlockingQueue<String> queues;
  List<String> objects = Arrays.asList("one","two","three");

  public producer(BlockingQueue<String> q) {
   this.queues = q;
  }

  public void run() {
   try {
    for (String s : objects) {
     queues.put(s);
     System.out.println("put:"+s);
    }
    queues.put("done");
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 class consumer implements Runnable {
  
  private BlockingQueue<String> queues;
  
  public consumer(BlockingQueue<String> q) {
   this.queues = q;
  }
  
  public void run() {
   
   String obj;
   
   try {
    while (!((obj = queues.take()).equals("done"))) {
     System.out.println("take:"+obj);
     Thread.sleep(3000);
    }
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }

 public static void main(String[] args) {
  
  BlockingQueue<String> bq = new SynchronousQueue<String>();
  
  SynchronousQueueTest sqt = new SynchronousQueueTest();
  
  new Thread(sqt.new producer(bq)).start();
  new Thread(sqt.new consumer(bq)).start();
 }
}

0
0
分享到:
评论

相关推荐

    Java并发编程--BlockingQueue.docx

    【Java并发编程--BlockingQueue详解】 BlockingQueue 是 Java 并发包(java.util.concurrent)中的一个接口,它扩展了 Queue 接口,并引入了线程安全的特性,特别适合于多线程环境下的数据共享。 BlockingQueue 的...

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    Java 并发集合:ConcurrentHashMap 和 ...Java 并发集合(ConcurrentHashMap 和 BlockingQueue)提供了高效的并发操作和线程安全机制,广泛应用于多种场景,例如多线程编程、数据存储和访问、生产者-消费者模式等。

    Java 多线程与并发(16-26)-JUC集合- BlockingQueue详解.pdf

    Java中的`BlockingQueue`接口是Java并发编程的重要组件,它位于`java.util.concurrent`包下,主要用于线程间数据的同步和通信。`BlockingQueue`是一个支持线程安全的队列,它允许一个线程放入(插入)元素,而另一个...

    java并发编程-构建块

    在Java编程领域,并发编程是不可或缺的一部分,尤其是在大型系统或高并发应用中。"java并发编程-构建块"这个主题涵盖了使程序能够同时处理多个任务的关键概念和技术。在这个主题下,我们将深入探讨Java中用于构建...

    Java并发编程-线程安全与基础构建模块

    本文将深入探讨"Java并发编程-线程安全与基础构建模块"这一主题,旨在帮助开发者理解如何有效地处理并发问题,提高程序性能和稳定性。 首先,线程安全是并发编程中的核心概念,指的是多个线程访问同一资源时,无论...

    java并发编程-超级大全整理

    Java并发包(`java.util.concurrent`)提供了许多工具类,如`ExecutorService`、`Semaphore`、`CountDownLatch`、`CyclicBarrier`、`Future`等,它们用于线程管理、同步控制、任务执行和结果获取,为并发编程提供了...

    java并发编程2

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...

    Java并发编程实践--电子书.rar

    并发编程是现代软件开发中的核心技能之一,尤其是在多核处理器普及后,利用多线程进行并发处理已经成为提升程序性能的关键技术。这本书深入浅出地讲解了Java平台上的并发编程原理、工具和最佳实践。 在Java中,线程...

    Java_并发核心编程-中英文版

    《Java_并发核心编程-中英文版》是一个深入探讨Java并发编程的重要资源,适用于那些希望在JDK 1.5及以后版本的Java环境中提升并发处理能力的开发者。并发编程是现代多核处理器环境下提高软件性能和效率的关键技术,...

    JAVA并发编程实践.pdf+高清版+目录 书籍源码

    《JAVA并发编程实践》这本书是Java开发者深入理解并发编程的重要参考资料。它涵盖了Java并发的核心概念、工具和最佳实践,旨在帮助读者在多线程环境下编写高效、安全的代码。 并发编程是现代软件开发中的关键技能,...

    Java并发编程实践-电子书-03章

    ### Java并发编程实践-电子书-03章知识点解析 #### 3.1 java.util.concurrent概述 `java.util.concurrent`包是在JDK5.0之后引入的,它为多线程编程提供了强大的支持,旨在更好地利用现代多处理器或多核系统的性能...

    JAVA并发编程艺术pdf版

    《JAVA并发编程艺术》是Java开发者深入理解和掌握并发编程的一本重要著作,它涵盖了Java并发领域的核心概念和技术。这本书详细阐述了如何在多线程环境下有效地编写高效、可靠的代码,对于提升Java程序员的技能水平...

    java并发编程源码-Concurrent-Programming-with-Java-and-OpenMP:并发编程分配源代码

    本资源“Concurrent-Programming-with-Java-and-OpenMP”提供了Java和OpenMP两种并发编程技术的源码实例,帮助开发者深入理解并发编程的实践与原理。 在Java中,Java并发API(Java Concurrency API)是实现并发编程...

    (PDF带目录)《Java 并发编程实战》,java并发实战,并发

    并发编程是现代软件开发中的核心技能之一,尤其是在多核处理器和分布式系统普及的今天。Java平台提供了丰富的并发工具和API,如线程、同步机制、并发容器、并发工具类等,这些在《Java 并发编程实战》中都有详尽的...

    JAVA并发编程实践-

    根据提供的信息,我们可以推断出该资源主要关注的是“Java并发编程实践”的相关内容,并且它是一本高清晰度的PDF电子书。虽然提供的链接部分似乎只是重复的网站地址,我们仍可以根据标题、描述以及标签来生成相关的...

    java并发编程书籍

    Java并发编程是软件开发中的一个关键领域,尤其是在大型企业级应用和分布式系统中。通过学习相关的书籍,开发者可以深入理解如何有效地设计和实现高效的多线程应用程序,避免并发问题,如竞态条件、死锁、活锁等。...

    java并发编程与实践

    在Java编程领域,并发编程是一项核心技能,尤其是在大型系统或分布式应用中,高效地处理多线程和并发操作是至关重要的。"Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效...

    JAVA并发编程实践 中文 高清 带书签 完整版 Doug Lea .pdf

    根据提供的文件信息,“JAVA并发编程实践 中文 高清 带书签 完整版 Doug Lea .pdf”,我们可以推断出这份文档主要聚焦于Java并发编程的技术实践与理论探讨。下面将从多个角度来解析这个文档可能涵盖的关键知识点。 ...

    Java并发编程进阶练习代码

    在Java编程领域,并发编程是一项核心技能,尤其是在大型分布式系统和多核处理器环境中。本练习集专注于提升你在Java并发编程中的技巧,通过一系列逐步进阶的代码实例,帮助你掌握从基础到高级的并发概念。 首先,...

Global site tag (gtag.js) - Google Analytics