队列具有先进先出的特点,成为经常应用于生产-消费者模式的数据结构。
1.将一个对象放到队列尾部,如果队列已满,就等待直到有空闲节点。
2.从队列头部取一个对象,如果没有对象,就等待直到有对象可取。
3.在存取队列的过程中,锁定队列对象,不允许其它线程访问队列。
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
public class TestBlockingQueue {
public static void main(String[] args){
//创建能容纳10个整数的队列
final BlockingQueue<Integer> queue=new LinkedBlockingQueue<Integer>(10);
final Integer enInt=new Integer(-0);
Runnable setter=new Runnable(){
public void run() {
try {
// TODO Auto-generated method stub
for(int i=0;i<10;i++){
queue.put(new Integer(i));
System.out.println(Thread.currentThread().getName()+" "+i);
}
queue.put(new Integer(0));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
new Thread(setter).start();
//创建两个读队列的线程
for(int j=0;j<2;j++){
Runnable getter=new Runnable(){
public void run() {
try {
while(true){
Thread.sleep(500);
Integer num=queue.take();
//队列无对象
if(num.intValue()==0){
queue.put(new Integer(0));
break;
}
System.out.println(Thread.currentThread().getName()+" "+num.intValue());
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// TODO Auto-generated method stub
}
};
new Thread(getter).start();
}
}
}
分享到:
相关推荐
它具有以下特性:当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加元素的操作也会被阻塞。这种特性使得`BlockingQueue`非常适合用于生产者-消费者模式的场景。 #### 2. ...
5. SynchronousQueue:不存储元素的阻塞队列,每次插入或移除都需要匹配的消费操作,常用于线程池的工作队列。 6. LinkedTransferQueue:基于链表的无界阻塞队列,支持高效的“传输”操作,可以在生产者和消费者之间...
阻塞队列(BlockingQueue)是一种特殊的队列,它支持两个附加操作:阻塞的插入方法put和阻塞的移除方法take。BlockingQueue继承了Queue接口,是Java 5中加入的。 BlockingQueue常用方法示例: 1. add(E e):添加一...
* 阻塞机制:BlockingQueue 提供了阻塞机制,当队列为空时,消费者线程会被阻塞,直到生产者线程添加数据。 Java 并发集合的应用 Java 并发集合可以应用于多种场景,例如: * 多线程编程:Java 并发集合可以用于...
在`BlockingQueue`中,如果队列已满,尝试插入元素的线程会被阻塞,直到队列中有空间可用;同样,如果队列为空,尝试取出元素的线程也会被阻塞,直到队列中有新的元素可用。这种机制避免了线程之间的竞争条件,提高...
BlockingQueue是Java并发包`java.util.concurrent`中的一个接口,它提供了在队列满时阻塞插入操作和队列空时阻塞删除操作的能力。这种设计模式被称为生产者-消费者模型,它有效地解决了线程间的同步问题,避免了不必...
### BlockingQueue(阻塞队列)详解 #### 一、前言 随着现代软件系统对并发性能需求的不断提高,多线程编程技术逐渐成为开发人员不可或缺的技能之一。在Java平台中,`java.util.concurrent`包提供了丰富的工具来...
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...
阻塞队列BlockingQueue是Java并发编程中一个重要的数据结构,它是线程安全的队列,主要用于生产者消费者模型中的数据交换。在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue...
Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;当队列满时,尝试添加元素的...
"详解Java阻塞队列(BlockingQueue)的实现原理" Java阻塞队列(BlockingQueue)是Java.util.concurrent包下重要的数据结构,提供了线程安全的队列访问方式。BlockingQueue的实现原理主要是基于四组不同的方法用于...
6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本.mp4
6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本.mp4
6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本.mp4
6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本副本.mp4
6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本副本.mp4
在C++环境中,`BlockingQueue.h`可能是一个自定义实现的阻塞队列头文件。它可能会包含如下内容: 1. **模板类定义**:定义一个模板类`BlockingQueue<T>`,其中`T`代表队列中元素的类型。 2. **数据成员**:使用`std...
阻塞队列(BlockingQueue)是Java并发包(java.util.concurrent)中的一个重要数据结构,它实现了队列的特性,同时具备线程安全的特性。当队列满时,添加元素的线程会被阻塞,直到队列有空位;当队列为空时,取出...
在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的... 使用ArrayBlockingQueue的一个子类BlockingQueue实现一个可阻塞队列,一个线程put另一个线程take,当队列为空时take等待,当线程满时put等待
在Java中,阻塞队列(BlockingQueue)是一个很好的实现生产者/消费者模式的工具,而LinkedBlockingQueue则是Java并发包(java.util.concurrent)中提供的一个具体实现。 LinkedBlockingQueue是一个基于链表结构的...