`
footman265
  • 浏览: 118415 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

Java 并发核心编程(三)

    博客分类:
  • j2SE
阅读更多

 

4.3Queues

Queues类似于沟通“生产者”和“消费者”的管道。组件从管道的一端放入,然后从另一端取出:“先进先出”(FIFO)的顺序。Queue接口在JavaSE5新添加到java.util中的,能够被用于单线程访问的场景中,主要适用于多个生产者、一个或多个消费者的情景,所有的读写操作都是基于同一个队列。

java.util.concurrent包中的BlockingQueue接口是Queue的子接口,而且还添加了新的特性处理如下场景:队列满(此时刚好有一个生产者要加入一个新的组件)、队列空(此时刚好有一个消费者读取或者删除一个组件)。BlockingQueue提供如下方案解决这些情况:一直阻塞等待直到其他线程修改队列的数据状态;阻塞一段时间之后返回,如果在这段时间内有其他线程修改队列数据,那么也会返回。

5QueueBlockingQueue的方法:

方法

策略

插入

移除

核查

Queue

抛出异常

add

remove

element

返回特定的值

offer

poll

peek

Blocking Queue

一直阻塞

put

take

n/a

超时阻塞

offer

poll

n/a

JDK中提供了一些Queue的实现,在表6中是这些实现类的关系列表。

方法

描述

PriorityQueue

PriorityQueue是唯一一个非线程安全的队列实现类,用于单线程存放数据并且将数据排序。

CurrentLinkedQueue

一个无界的、基于链接列表的、唯一一个线程安全的队列实现类,不支持BlockingQueue

ArrayBlockingQueue

一个有界的、基于数组的阻塞队列。

LinkedBlockingQueue

一个有界的、基于链接列表的阻塞队列。有可能是最常用的队列实现。

PriorityBlockingQueue

一个无界的、基于堆的阻塞队列。队列根据设置的Comparator(比较器)来确定组件读取、移除的顺序(不是队列默认的FIFO顺序)

DelayQueue

一个无界的、延迟元素(每个延迟元素都会有相应的延迟时间值)的阻塞队列实现。只有在延时期过了之后,元素才能被移除,而且最先被移除的是延时最先到期的元素。

SynchronousQueue

一种0容量的队列实现,生产者添加元素之后必须等待消费者移除后才可以返回,反之依然。如果生产者和消费者2个线程同时访问,那么参数直接从生产者传递到消费者。经常用于线程之间的数据传输。

 

4.4Deque

JavaSE6中新增加了两端都可以添加和删除的队列-Deque (发音"deck",not "dick"). Deques不仅可以从一端添加元素,从另一端移除,而且两端都可以添加和删除元素。如同BlockingQueueBlockingDeque接口也为阻塞等待和超时等待的特殊情况提供了解决方法。因为Deque继承QueueBlockingDeque继承BlockingQueue,下表中的方法都是可以使用的:

接口

头或尾

策略

插入

移除

核查

Queue

Head

抛出异常

addFirst

removeFirst

getFirst

返回特定的值

offerFirst

pollFirst

peekFirst

Tail

抛出异常

addLast

removeLast

getLast

返回特定的值

offerLast

pollLast

peekLast

BlockingQueue

Head

一直阻塞

putFirst

takeFirst

n/a

超时阻塞

offerFirst

pollFirst

n/a

Tail

一直阻塞

putLast

takeLast

n/a

超时阻塞

offerLast

pollLast

n/a

 

Deque的一个特殊应用场景是只在一个端口进行添加、删除、检查操作--堆栈(first-in-last-out顺序)Deque接口提供了stack相同的方法:push(), pop()peek(),这方法和addFirst(), removeFirst(), peekFirst()一一对应,可以把Deque的任何一个实现类当做堆栈使用。表6中是JDKDequeBlockingDeque的实现。注意Deque继承QueueBlockingDeque继承自BlockingQueue

8Deques

分享到:
评论

相关推荐

    Java并发核心编程.pdf

    Java并发核心编程.pdf

    Java 并发核心编程

    ### Java 并发核心编程知识点解析 #### 一、Java并发概述 自Java诞生之初,其设计者就赋予了该语言强大的并发处理能力。Java语言内置了对线程和锁的支持,这使得开发者能够轻松地编写多线程应用程序。本文旨在帮助...

    Java并发编程-3.pdf

    Java并发编程中的多线程协作机制 在 Java 并发编程中,多线程协作机制是非常重要的一部分。多线程协作机制是指在多线程编程中,多个线程之间如何协作、同步和通信,以达到共同完成某个任务的目的。Java 提供了多种...

    Java 并发核心编程原文+译文

    Java并发核心编程是Java开发中的重要领域,它涉及到多线程和高效率程序设计的关键技术。在Java 5和Java 6中,JVM引入了大量的并发工具和改进,以支持多处理器和多核系统上的高性能应用程序。以下是这些知识点的详细...

    《java 并发编程实战高清PDF版》

    在Java并发编程中,多线程是核心概念之一。多线程允许程序同时执行多个任务,从而充分利用系统资源,提高程序性能。然而,多线程编程也带来了同步和竞态条件等问题,这需要开发者具备良好的线程管理和同步机制的知识...

    java并发编程艺术

    《Java并发编程艺术》这本书深入探讨了Java平台上的并发编程技术。并发编程是现代多核处理器环境下提升软件性能的关键手段,而Java语言提供了丰富的工具和API来支持这一领域。本书旨在帮助开发者理解和掌握如何在...

    java并发核心编程

    ### Java并发核心编程 #### 一、关于Java并发 自Java问世以来,就一直支持并发的概念,例如线程和锁等。并发编程是现代软件工程中不可或缺的一部分,尤其是在多核处理器普及的今天,利用好并发可以极大地提升程序...

    Java 并发编程实战.pdf

    根据提供的信息,“Java 并发编程实战.pdf”这本书聚焦于Java并发编程的实践与应用,旨在帮助读者深入了解并掌握Java中的多线程技术及其在实际项目中的应用技巧。虽然部分内容未能提供具体章节或实例,但从标题及...

    java并发编程

    Java并发API的核心组件包括: 1. **ExecutorService**: 这是线程池的接口,通过它可以管理和控制线程的执行。`Executors`类提供了一些工厂方法来创建不同类型的线程池,如固定大小的线程池、单线程的Executor等。 ...

    Java并发编程实践高清pdf及源码

    4. **线程池**:`ExecutorService`是Java并发框架的核心,它管理一组可重用线程,有效地调度和执行任务。`ThreadPoolExecutor`是其最常见的实现,允许自定义线程池参数。 5. **并发工具类**:如`CountDownLatch`、`...

    java并发编程实践pdf笔记

    这本书的读书笔记涵盖了多个关键知识点,旨在帮助读者深入理解Java并发编程的核心概念。 1. **线程和进程的区别** - **线程** 是程序执行的最小单位,一个进程中可以有多个线程同时执行,共享同一块内存空间,通信...

    JAVA并发编程艺术pdf版

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

    java并发编程书籍

    2. **同步机制**:Java并发编程的核心在于同步,以防止数据不一致性和资源竞争。`synchronized`关键字用于实现临界区的互斥访问,确保同一时刻只有一个线程执行特定代码块。此外,还有`wait()`, `notify()`, `...

    java并发编程内部分享PPT

    这份“java并发编程内部分享PPT”显然是一个深入探讨这一主题的资料,旨在帮助开发者理解并掌握Java并发编程的核心概念和技术。 在Java并发编程中,首先我们需要了解的基本概念是线程。线程是操作系统分配CPU时间的...

    Java并发编程实战华章专业开发者书库 (Tim Peierls 等 美Brian Goetz).pdf

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...

    java并发编程实战(英文版)

    ### Java并发编程实战知识点概述 #### 一、Java并发特性详解 在《Java并发编程实战》这本书中,作者深入浅出地介绍了Java 5.0和Java 6中新增的并发特性。这些特性旨在帮助开发者更高效、安全地编写多线程程序。书中...

    java 并发编程的艺术pdf清晰完整版 源码

    《Java并发编程的艺术》这本书是Java开发者深入理解并发编程的重要参考书籍。这本书全面地介绍了Java平台上的并发和多线程编程技术,旨在帮助开发者解决在实际工作中遇到的并发问题,提高程序的性能和可伸缩性。 ...

Global site tag (gtag.js) - Google Analytics