今天学习一下队列,队列第一反应就是先进先出的存取模式,今天主要讲的就是jdk1.5中的新特性,ArrayBlockingQueue 。
功能:
1、ArrayBlockingQueue的存取是加了锁,所以ArrayBlockingQueue是线程安全的,支持并发操作;
2、ArrayBlockingQueue是阻塞队列,当为空或者队列满是,线程取或者存是处于阻塞状态的;
3、是实现生产者消费者模型的极好的备选工具。
实现依赖: 1、lock锁(内存的可见性、互斥访问、限制编译器的代码优化调整)
2、Condition条件通知(线程间的协作)
核心方法:
1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则报异常
2)offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.
3)put(anObject):把anObject加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.
4)poll(time):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null
5)take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有 新的对象被加入为止
其他blockingqueue
1)ArrayBlockingQueue:规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小.其所含的对象是以FIFO(先入先出)顺序排序的.
2)LinkedBlockingQueue:大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含的对象是以FIFO(先入先出)顺序排序的
3)PriorityBlockingQueue:类似于LinkedBlockQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数的Comparator决定的顺序.
4)SynchronousQueue:特殊的BlockingQueue,对其的操作必须是放和取交替完成的.
3.LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致 LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue.
分享到:
相关推荐
在深入理解ArrayBlockingQueue的源码之前,我们需要先了解其基本概念和特性。 ArrayBlockingQueue的核心特点在于其固定大小的容量,这使得它在处理高并发场景时能有效控制资源消耗。队列的元素按照FIFO(先进先出)...
本文将深入解析ArrayBlockingQueue的常用方法及其内部实现机制。 ArrayBlockingQueue的核心是一个固定大小的数组`items`,用于存储队列中的元素。此外,它还有3个关键的索引变量:`takeIndex`、`putIndex`和`count`...
9.深入理解AbstractQueuedSynchronizer(AQS) 10.彻底理解ReentrantLock 11.深入理解读写锁ReentrantReadWriteLock 12.详解Condition的await和signal等待通知机制 13.LockSupport工具 14.并发容器之ConcurrentHashMap...
综上所述,《深入浅出Java多线程.pdf》覆盖了Java多线程从基础知识到高级特性的各个方面,适合于想要深入理解Java多线程机制的开发人员阅读。无论是初学者还是有一定经验的开发者,都能从中获得宝贵的理论知识和实践...
深入理解Java编程线程池的实现原理 Java中的线程池是通过ThreadPoolExecutor类来实现的,该类继承了AbstractExecutorService类,提供了四个构造方法,可以控制线程池的大小、核心池的大小、最大线程数、线程的存活...
深入研究线程池:理解与应用 在计算机科学领域,线程池技术是现代多线程编程中的核心概念之一,尤其在Java等高级语言中,它被广泛应用于提高程序的并发性和响应性。线程池的基本思想是预先创建一定数量的线程,将...
- **Lock接口**:深入理解ReentrantLock(可重入锁)及其相关API,如Condition。 - **信号量Semaphore**:了解其在资源限制场景下的应用。 3. **并发容器** - **并发集合**:如ConcurrentHashMap、...
最后,集合面试题会涉及Java集合框架的深入理解: 1. **集合接口**:List、Set、Queue、Map等接口的特点和使用场景。 2. **HashMap与HashTable**:对比两者的异同,理解线程安全和非线程安全的区别。 3. **...
在Java并发编程中,无锁并行计算框架如Disruptor提供了一种高效且低延迟的方式来...然而,使用Disruptor需要对并发编程有深入理解,因为其API和工作模式相比传统的并发工具更复杂,但带来的性能提升是值得投入学习的。
"JUC并发编程学习笔记(硅谷)"很可能包含了关于Java并发工具集(Java Util Concurrency, JUC)的深入理解和实战经验。JUC是Java标准库提供的一套强大的并发处理工具,它极大地简化了多线程编程,提高了程序的可读性...
本文将深入探讨`ConcurrentLinkedQueue`、`ArrayBlockingQueue`以及`LinkedBlockingQueue`这三种实现,并分析它们的设计原理与应用场景。 首先,我们来看`ConcurrentLinkedQueue`。它是基于非阻塞算法(CAS,...
综上所述,《JAVA并发编程中文完全版》这本书不仅覆盖了Java并发编程的基础理论,还深入探讨了许多高级主题和技术细节,对于希望深入理解和掌握Java并发编程技术的开发者来说,是一本非常有价值的参考书籍。...
深入理解`ThreadPoolExecutor`的工作模式,如核心线程数、最大线程数、任务队列和拒绝策略,有助于优化系统性能。 7. **阻塞队列**:如`LinkedBlockingQueue`和`ArrayBlockingQueue`,它们在并发编程中常用于线程间...
在《Tomboxfan的博客》中,博主深入探讨了Blocking Queue的使用技巧,通过具体的示例代码(如提供的`ToastOMatic.java`文件)展示了如何在实际项目中应用阻塞队列,这对于我们理解并掌握Blocking Queue的实际应用...
14. **Java类加载机制及类加载器**:深入理解JVM类加载过程和自定义类加载器的实现。 15. **Java深拷贝和浅拷贝**:掌握对象拷贝的两种方式的区别和实现。 16. **Java transient关键字**:了解序列化时忽略字段的...
这个压缩包旨在帮助学习者深入理解并应用生产者/消费者模型,这一模型是并发编程中的重要概念,广泛应用于多线程环境。 生产者/消费者模型是一个典型的同步问题,它涉及到了线程间的通信和协作。在这个模型中,...