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是Java并发容器中两个常用的阻塞队列实现,分别基于数组和链表存储元素。它们都继承自AbstractQueue类...
Java的BlockingQueue接口(如ArrayBlockingQueue)非常适合实现这一模型,它提供了线程安全的数据插入和移除操作。 在实例中提到的"全部开始 全部停止 单个停止"可能涉及到线程的启动和控制,这可以通过控制线程的...
Java的并发包提供了多种实现,如ArrayBlockingQueue、LinkedBlockingQueue等,它们在并发环境中非常有用,可以实现线程间的生产者-消费者模型。 在"JAVA100例之实例64 JAVA线程间通讯"的示例中,可能包含了上述一种...
Java 5引入了BlockingQueue阻塞队列,提供了一种更安全的线程间通信方式,如ArrayBlockingQueue、LinkedBlockingQueue等。 在"线程池.rar"和"线程实例"这两个文件中,你可以找到关于这些概念的具体示例代码,通过...
本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...
- 可能会用到队列来存储乘客的楼层请求,例如`LinkedList`或`ArrayBlockingQueue`。 - 当电梯到达某个楼层时,检查队列中的请求并处理。 5. **事件驱动编程**: - 电梯模拟可能采用事件驱动模型,电梯线程监听...
`ProducerAndConsumer.zip`中的代码可能包含一个简单的Java实现,生产者类(Producer)和消费者类(Consumer)分别继承自Thread类,它们共享一个`BlockingQueue`实例。生产者类的run方法不断生成数据并调用`queue....
此外,还有基于阻塞队列的通信方式,如ArrayBlockingQueue、LinkedBlockingQueue等,它们在并发编程中有着广泛的应用,例如生产者消费者模型。 四、线程状态与生命周期 Java线程有五种状态:新建(New)、就绪...
在Java模拟生产者与消费者的场景中,通常会用到阻塞队列(如ArrayBlockingQueue)和锁的概念。生产者将产品放入队列,而消费者从队列中取出产品。当队列满时,生产者会被阻塞直到有空间可用;当队列空时,消费者会被...
12. **Java集合框架高级主题**:包括并发容器(如ConcurrentHashMap和CopyOnWriteArrayList)、队列(如ArrayBlockingQueue和PriorityQueue)以及Lambda表达式和流API的使用。 13. **Java注解(Annotation)**:...
本话题将深入探讨多线程的实例片段,结合源码分析,帮助开发者理解如何有效地利用多线程来提高程序性能。 首先,多线程允许一个应用程序同时执行多个任务,这在现代计算机系统中是非常必要的,因为处理器的多核设计...
- **BlockingQueue**:阻塞队列,实现生产者-消费者模型,如`ArrayBlockingQueue`、`LinkedBlockingQueue`等。 4. **原子类** - `Atomic*`系列类,如`AtomicInteger`、`AtomicBoolean`等,提供了基于CAS(Compare...
在Java中,自Java 5.0起,`java.util.concurrent`包提供了多种阻塞队列的实现,例如`ArrayBlockingQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`等。这些类都实现了`java.util.concurrent.BlockingQueue`...
本实例将深入探讨如何在Java中使用线程池,以及其背后的原理和最佳实践。 首先,线程池的基本工作原理是接收`Runnable`或`Callable`任务,将其存储在队列中,并由池中的线程处理。线程池可以预先配置最大线程数、...
本文将深入讲解Java内置队列类Queue的使用方法,并通过实例来展示其功能。 首先,`java.util.Queue`是Java集合框架的一部分,它是所有队列类型的父接口。Queue接口提供了多种方法用于操作队列,包括添加元素、移除...
Java 打造阻塞式线程池的实例详解 Java 打造阻塞式线程池是指在 Java 中创建一个线程池,並且该线程池可以阻塞式地执行任务,直到线程池的队列中有可用的线程资源时,才继续执行任务。这种线程池的优点是可以避免...
- `workQueue`:工作队列的类型,可以选择不同类型的阻塞队列,如无界队列`LinkedBlockingQueue`或有界队列`ArrayBlockingQueue`。 - `threadFactory`:线程工厂,用于创建线程。 - `handler`:拒绝策略,处理无法...
在示例代码中,创建了一个`ArrayBlockingQueue`实例,然后尝试将30个元素放入容量为20的队列中。由于队列满了,第20个元素之后的插入操作会被阻塞,直到其他线程消费队列中的元素。 阻塞栈,作为Java 6的新特性,...
在生产者消费者问题中,通常我们会选择实现Runnable接口,因为它允许我们避免单继承的限制,并且可以通过实现多个Runnable实例来创建多个线程。 在Java中,`java.util.concurrent`包提供了多种工具类来帮助我们管理...