package com.aliyun.blockqueue;
import java.util.LinkedList;
import java.util.List;
/**
* 阻塞队列实现
* Created with IntelliJ IDEA.
* User: jack
* Date: 14-6-16
* Time: 下午3:38
* To change this template use File | Settings | File Templates.
*/
public class SimpleBlockingQueue {
private List blockQueue=new LinkedList(); //存放实例的队列
private int limit=10; //队列的上限
public SimpleBlockingQueue(int limit){
this.limit=limit;
}
/**
* 向队列中添加数据
* @param object
*/
public synchronized void put(Object object){
//判断队列是否已满
while(this.limit==blockQueue.size()){
try {
wait();
System.out.println("进入阻塞"+object);
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
//判断队列是否还没有数据,如果没有唤醒所有线程
if(blockQueue.size()==0){
notifyAll();
System.out.println("没有数据,唤醒所有线程");
}
//向队列中添加元素
this.blockQueue.add(object);
for(Object obj:this.blockQueue){
System.out.println("元素"+obj+"已添加到队列中");
}
}
/**
* 获取队列中的数据
*/
public synchronized Object take(){
//判断队列是否有数据
while(this.blockQueue.size()==0){
try {
wait();
System.out.println("获取数据时进入阻塞状态");
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
//判断队列是否已满
if(this.limit==this.blockQueue.size()){
notifyAll();
System.out.println("获取数据时队列已满");
}
System.out.println(this.blockQueue.remove(0));
return this.blockQueue.remove(0);
}
}
package com.aliyun.blockqueue;
import org.junit.Test;
/**
* 测试阻塞队列的实现
* Created with IntelliJ IDEA.
* User: jack
* Date: 14-6-16
* Time: 下午3:59
* To change this template use File | Settings | File Templates.
*/
public class TestSimpleBlockingQueue {
@Test
public void testPut(){
SimpleBlockingQueue simpleBlockingQueue=new SimpleBlockingQueue(5);
for(int i=0;i<10;i++){
simpleBlockingQueue.put("测试数据");
if(i==7){
simpleBlockingQueue.take();
}
}
}
}
相关推荐
【Java线程聊天室(阻塞队列实现)】 在Java编程中,多线程是构建并发应用程序的关键技术。在创建一个线程聊天室时,我们通常会涉及到多个线程之间的交互,例如用户发送消息、接收消息以及处理网络通信等。而阻塞...
在提供的代码实例中,我们看到了一个简单的阻塞队列实现,使用了`LinkedList`作为底层数据结构,并通过`synchronized`关键字来实现线程安全。`enqueue`方法用于向队列尾部添加元素,`dequeue`方法用于从队列头部移除...
在"阻塞队列实现生产者消费者模式Java开发Java经验技巧共4页.pdf.zip"这个压缩包中,很可能是详细介绍了如何使用Java的阻塞队列来构建生产者消费者模式,可能包括以下知识点: 1. **阻塞队列接口**:首先,会介绍`...
Java中的`java.util.concurrent`包提供了多种阻塞队列实现,如`ArrayBlockingQueue`, `LinkedBlockingQueue`, `PriorityBlockingQueue`等。 ### 生产者消费者模型 生产者消费者模型是并发设计模式的一种,用于协调...
在Java中,`java.util.concurrent`包提供了多种阻塞队列实现,如`ArrayBlockingQueue`, `LinkedBlockingQueue`等。它们都实现了`BlockingQueue`接口,提供了一套线程安全的方法来添加和移除元素,如`put()`, `take()...
基于c++11的轻量级Web并发服务器,使用Epoll与Reactor高并发模型,基于小根堆实现了定时器,利用单例模式与阻塞队列实现异步的日志系统.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松...
Java阻塞队列实现原理及实例解析 Java阻塞队列是一种特殊的队列,它能够在队列为空或满时阻塞线程,使得线程之间能够更好地协作和通信。阻塞队列的实现原理是基于锁机制和条件变量机制的,通过wait和notify方法来...
Java中的阻塞队列实现主要依赖于`java.util.concurrent`包下的几个类,如`BlockingQueue`接口、`ArrayBlockingQueue`、`LinkedBlockingQueue`等。`BlockingQueue`接口定义了一组操作,如`put`、`take`、`offer`等,...
Java中的ArrayBlockingQueue和LinkedBlockingQueue都是典型的阻塞队列实现。 阻塞队列为线程间通信提供了便捷的机制,可以用来协调多个线程的运行,防止多线程直接访问共享资源导致的并发问题。例如,生产者-消费者...
以下是一个基于`wait()`和`notify()`的简单阻塞队列实现: ```java public class SimpleBlockQueue<T> { private int capacity; private LinkedList<T> queue = new LinkedList(); private int count; ...
常见的阻塞队列实现包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等。阻塞队列常被用作线程池的工作队列,连接生产者(添加任务的线程)和消费者(执行任务的线程),实现任务的异步处理。 ...
C++11 实现的阻塞队列 C++11 中的阻塞队列是指在多线程环境下,实现生产者消费者模式的队列。阻塞队列的实现需要解决两个问题:线程安全和阻塞机制。在 C++11 中,我们可以使用 std::mutex、std::condition_...
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中...通过对不同阻塞队列实现的理解和掌握,可以更好地设计和优化高并发系统,提升系统的稳定性和性能。
Java中常见的阻塞队列实现包括: 1. `ArrayBlockingQueue`: 一个基于固定大小数组的阻塞队列,公平或非公平的锁策略可选。 2. `LinkedBlockingQueue`: 基于链表结构的阻塞队列,容量可以无限大,但内部维护了一个...
### 高性能阻塞队列的数据结构创新 #### 一、阻塞队列的概念与应用 **阻塞队列**是一种特殊的队列,它具备线程安全的特点,...在实际应用中,可以根据具体场景选择合适的阻塞队列实现方式,以达到最佳的并发效果。
ArrayBlockingQueue是一个基于固定数组实现的阻塞队列。它的容量在创建时就需要指定,并且不可变。队列内部采用双指针机制,一个指向头部,一个指向尾部,进行元素的入队和出队操作。ArrayBlockingQueue支持公平和非...
Java 1.5引入的`java.util.concurrent`包提供了一些内置的阻塞队列实现,主要包括: 1. **ArrayBlockingQueue**:基于固定大小的数组实现,插入和删除操作都具有O(1)的时间复杂度。队列的公平性可以在构造时选择,...
本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...
`LinkedBlockingQueue` 同样是 `java.util.concurrent` 包下的一个线程安全的阻塞队列实现,它继承自 `AbstractQueue` 并实现了 `BlockingQueue` 接口。`LinkedBlockingQueue` 的特点是可以在队列满时阻塞生产者线程...