`

ArrayBlockingQueue实例

阅读更多
package concurrent.arrayblockingQueue;

import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
/**
 * ArrayBlockingQueue长度固定大小
 * LinkedBlockingQueue长度大小可以不固定
 * 
 * 插入方法:
 * add(E e):将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则抛出 IllegalStateException
 * offer(E e):将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回 true,如果此队列已满,则返回 false
 * offer(E e, long timeout, TimeUnit unit): 将指定的元素插入此队列的尾部,如果该队列已满,则在到达指定的等待时间之前等待可用的空间
 * put(E e):将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间
 * 
 * 获取方法:
 * peek():获取但不移除此队列的头;如果此队列为空,则返回 null
 * poll():获取并移除此队列的头,如果此队列为空,则返回 null
 * take(): 获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)
 * 
 * 
 */
public class ArrayBlockingQueueTest {
	
	public static BlockingQueue<String> queue=new ArrayBlockingQueue<String>(5);

	public static void main(String[] args) throws InterruptedException {
				
		boolean b;
		for(int i=0;i<10;i++){
			b=queue.offer(String.valueOf(i),1000,TimeUnit.MILLISECONDS);
//			b=queue.add(String.valueOf(i));
//			queue.put(String.valueOf(i));
			System.out.println(b);
			
		}
		queue.remove("1");//移除指定元素
		System.out.println("contains:"+queue.contains("0"));
		System.out.println("*****************");
		
		for(int i=0;i<10;i++){
			String s=queue.poll();
//			String s=queue.poll(1000,TimeUnit.MILLISECONDS);
//			String s=queue.take();
			System.out.println(s);
		}
		
		System.out.println("队列长度:"+queue.size());
		System.out.println(queue.toString());
		
		
		Iterator<String> it = queue.iterator();
		while(it.hasNext()){
			String value=it.next();
			System.out.println(value);
		}
		
		
	}
}

分享到:
评论

相关推荐

    并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

    "并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解" ArrayBlockingQueue和LinkedBlockingQueue是Java并发容器中两个常用的阻塞队列实现,分别基于数组和链表存储元素。它们都继承自AbstractQueue类...

    java 多线程并发实例

    Java的BlockingQueue接口(如ArrayBlockingQueue)非常适合实现这一模型,它提供了线程安全的数据插入和移除操作。 在实例中提到的"全部开始 全部停止 单个停止"可能涉及到线程的启动和控制,这可以通过控制线程的...

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

    Java的并发包提供了多种实现,如ArrayBlockingQueue、LinkedBlockingQueue等,它们在并发环境中非常有用,可以实现线程间的生产者-消费者模型。 在"JAVA100例之实例64 JAVA线程间通讯"的示例中,可能包含了上述一种...

    java线程实例 各种小Demo

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

    java学习(基于Java阻塞队列的搜索实例).pdf

    本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...

    java语言模拟多层电梯的实例

    - 可能会用到队列来存储乘客的楼层请求,例如`LinkedList`或`ArrayBlockingQueue`。 - 当电梯到达某个楼层时,检查队列中的请求并处理。 5. **事件驱动编程**: - 电梯模拟可能采用事件驱动模型,电梯线程监听...

    生产者与消费者实例代码,线程学习必备

    `ProducerAndConsumer.zip`中的代码可能包含一个简单的Java实现,生产者类(Producer)和消费者类(Consumer)分别继承自Thread类,它们共享一个`BlockingQueue`实例。生产者类的run方法不断生成数据并调用`queue....

    JAVA多线程实例 随书源码

    此外,还有基于阻塞队列的通信方式,如ArrayBlockingQueue、LinkedBlockingQueue等,它们在并发编程中有着广泛的应用,例如生产者消费者模型。 四、线程状态与生命周期 Java线程有五种状态:新建(New)、就绪...

    java线程程序实例

    在Java模拟生产者与消费者的场景中,通常会用到阻塞队列(如ArrayBlockingQueue)和锁的概念。生产者将产品放入队列,而消费者从队列中取出产品。当队列满时,生产者会被阻塞直到有空间可用;当队列空时,消费者会被...

    Java基础讲义与实例 PPT

    12. **Java集合框架高级主题**:包括并发容器(如ConcurrentHashMap和CopyOnWriteArrayList)、队列(如ArrayBlockingQueue和PriorityQueue)以及Lambda表达式和流API的使用。 13. **Java注解(Annotation)**:...

    多线程实例片段

    本话题将深入探讨多线程的实例片段,结合源码分析,帮助开发者理解如何有效地利用多线程来提高程序性能。 首先,多线程允许一个应用程序同时执行多个任务,这在现代计算机系统中是非常必要的,因为处理器的多核设计...

    juc从入门到精通实例代码.rar

    - **BlockingQueue**:阻塞队列,实现生产者-消费者模型,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。 4. **原子类** - `Atomic*`系列类,如`AtomicInteger`、`AtomicBoolean`等,提供了基于CAS(Compare...

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

    在Java中,自Java 5.0起,`java.util.concurrent`包提供了多种阻塞队列的实现,例如`ArrayBlockingQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`等。这些类都实现了`java.util.concurrent.BlockingQueue`...

    java线程池实例

    本实例将深入探讨如何在Java中使用线程池,以及其背后的原理和最佳实践。 首先,线程池的基本工作原理是接收`Runnable`或`Callable`任务,将其存储在队列中,并由池中的线程处理。线程池可以预先配置最大线程数、...

    Java 队列 Queue 用法实例详解

    本文将深入讲解Java内置队列类Queue的使用方法,并通过实例来展示其功能。 首先,`java.util.Queue`是Java集合框架的一部分,它是所有队列类型的父接口。Queue接口提供了多种方法用于操作队列,包括添加元素、移除...

    java 打造阻塞式线程池的实例详解

    Java 打造阻塞式线程池的实例详解 Java 打造阻塞式线程池是指在 Java 中创建一个线程池,並且该线程池可以阻塞式地执行任务,直到线程池的队列中有可用的线程资源时,才继续执行任务。这种线程池的优点是可以避免...

    java线程池实例详细讲解

    - `workQueue`:工作队列的类型,可以选择不同类型的阻塞队列,如无界队列`LinkedBlockingQueue`或有界队列`ArrayBlockingQueue`。 - `threadFactory`:线程工厂,用于创建线程。 - `handler`:拒绝策略,处理无法...

    java线程大总结.pdf

    在示例代码中,创建了一个`ArrayBlockingQueue`实例,然后尝试将30个元素放入容量为20的队列中。由于队列满了,第20个元素之后的插入操作会被阻塞,直到其他线程消费队列中的元素。 阻塞栈,作为Java 6的新特性,...

    生产者消费者问题java

    在生产者消费者问题中,通常我们会选择实现Runnable接口,因为它允许我们避免单继承的限制,并且可以通过实现多个Runnable实例来创建多个线程。 在Java中,`java.util.concurrent`包提供了多种工具类来帮助我们管理...

Global site tag (gtag.js) - Google Analytics