`
denghua10
  • 浏览: 73456 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

阻塞队列-BlockingQueue

阅读更多
队列具有先进先出的特点,成为经常应用于生产-消费者模式的数据结构。
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

    它具有以下特性:当队列为空时,从队列中获取元素的操作会被阻塞;同样地,当队列满时,向队列中添加元素的操作也会被阻塞。这种特性使得`BlockingQueue`非常适合用于生产者-消费者模式的场景。 #### 2. ...

    Java并发编程--BlockingQueue.docx

    5. SynchronousQueue:不存储元素的阻塞队列,每次插入或移除都需要匹配的消费操作,常用于线程池的工作队列。 6. LinkedTransferQueue:基于链表的无界阻塞队列,支持高效的“传输”操作,可以在生产者和消费者之间...

    14-阻塞队列BlockingQueue实战及其原理分析二.pdf

    阻塞队列(BlockingQueue)是一种特殊的队列,它支持两个附加操作:阻塞的插入方法put和阻塞的移除方法take。BlockingQueue继承了Queue接口,是Java 5中加入的。 BlockingQueue常用方法示例: 1. add(E e):添加一...

    Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf

    * 阻塞机制:BlockingQueue 提供了阻塞机制,当队列为空时,消费者线程会被阻塞,直到生产者线程添加数据。 Java 并发集合的应用 Java 并发集合可以应用于多种场景,例如: * 多线程编程:Java 并发集合可以用于...

    Java 多线程与并发(16-26)-JUC集合- BlockingQueue详解.pdf

    在`BlockingQueue`中,如果队列已满,尝试插入元素的线程会被阻塞,直到队列中有空间可用;同样,如果队列为空,尝试取出元素的线程也会被阻塞,直到队列中有新的元素可用。这种机制避免了线程之间的竞争条件,提高...

    spring-blockingqueue:用Spring Boot阻止队列

    BlockingQueue是Java并发包`java.util.concurrent`中的一个接口,它提供了在队列满时阻塞插入操作和队列空时阻塞删除操作的能力。这种设计模式被称为生产者-消费者模型,它有效地解决了线程间的同步问题,避免了不必...

    10、阻塞队列BlockingQueue实战及其原理分析.pdf

    ### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中`java.util.concurrent`包下提供的一种重要的线程安全队列。它继承自`Queue`接口,并在此基础上...

    10、阻塞队列BlockingQueue实战及其原理分析

    阻塞队列BlockingQueue是Java并发编程中一个重要的数据结构,它是线程安全的队列,主要用于生产者消费者模型中的数据交换。在Java的`java.util.concurrent`包中,提供了多种实现阻塞队列的类,如`ArrayBlockingQueue...

    java 中 阻塞队列BlockingQueue详解及实例

    Java中的阻塞队列BlockingQueue是一种并发编程中常用的工具,它实现了线程间的同步和通信。阻塞队列的核心特性在于当队列为空时,尝试获取元素的线程会被阻塞,直到其他线程添加元素;当队列满时,尝试添加元素的...

    详解Java阻塞队列(BlockingQueue)的实现原理

    "详解Java阻塞队列(BlockingQueue)的实现原理" Java阻塞队列(BlockingQueue)是Java.util.concurrent包下重要的数据结构,提供了线程安全的队列访问方式。BlockingQueue的实现原理主要是基于四组不同的方法用于...

    BlockingQueue(阻塞队列)详解

    ### BlockingQueue(阻塞队列)详解 #### 一、前言 随着现代软件系统对并发性能需求的不断提高,多线程编程技术逐渐成为开发人员不可或缺的技能之一。在Java平台中,`java.util.concurrent`包提供了丰富的工具来...

    阻塞队列阻塞队列阻塞队列

    这些阻塞队列都实现了java.util.concurrent.BlockingQueue接口,提供了如put、take、offer、poll等方法,用于进行元素的插入、移除以及检查操作。它们广泛应用于生产者-消费者模型、线程池的工作队列等并发场景,...

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本.mp4

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本.mp4

    6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本.mp4

    6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本.mp4

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本.mp4

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本.mp4

    6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本副本.mp4

    6.7 阻塞队列BlockingQueue 实战及其原 理分析二副本副本.mp4

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本副本.mp4

    6.6 阻塞队列BlockingQueue 实战及其原 理分析一副本副本副本.mp4

    支持多线程和泛型的阻塞队列

    在C++环境中,`BlockingQueue.h`可能是一个自定义实现的阻塞队列头文件。它可能会包含如下内容: 1. **模板类定义**:定义一个模板类`BlockingQueue&lt;T&gt;`,其中`T`代表队列中元素的类型。 2. **数据成员**:使用`std...

    并发-线程池和阻塞队列

    阻塞队列(BlockingQueue)是Java并发包(java.util.concurrent)中的一个重要数据结构,它实现了队列的特性,同时具备线程安全的特性。当队列满时,添加元素的线程会被阻塞,直到队列有空位;当队列为空时,取出...

    Java可阻塞队列-ArrayBlockingQueue

    在前面的的文章,写了一个带有缓冲区的队列,是用JAVA的Lock下的...  使用ArrayBlockingQueue的一个子类BlockingQueue实现一个可阻塞队列,一个线程put另一个线程take,当队列为空时take等待,当线程满时put等待  

Global site tag (gtag.js) - Google Analytics