- 浏览: 24969 次
文章分类
- 全部博客 (35)
- linux (0)
- basedaoimpl 1 (0)
- basedao (1)
- basedaoimpl 2 (0)
- basedaoimpl 3 (0)
- basedaoimpl 4 (0)
- basedaoimpl 5 (0)
- basedaoimpl 6 (0)
- basedaoimpl 7 (0)
- htmlservlet1 (0)
- htmlservlet2 (0)
- htmlservlet3 (0)
- htmlservlet4 (0)
- excle1 (0)
- excle2 (0)
- pdf1 (0)
- pdf2 (0)
- servletutil1 (0)
- servletutil2 (0)
- servletutil3 (0)
- ziputil1 (0)
- ziputil2 (0)
- 项目管理以及统计工具 (0)
- linux命令总结 (0)
- 经典回答 (0)
- TR点设置 (0)
- TR点设置2 (0)
- 枚举 (1)
- tomcat5.5.xx以上 (1)
- 标准的写法遍历Map (1)
- 线程安全 (1)
- sql (1)
- 转义字符 (1)
- 经典美文1 (1)
- 经典美文2 (1)
- 经典美文3 (1)
- webservice以及线程应用 (1)
- webservice以及线程应用2 (1)
- InitializingBean应用 (1)
- 线程应用 (1)
- sqlloader1 (1)
- sqlloader2 (1)
- sqlloader3 (1)
- sqlloader4 (1)
- sqlloader5 (1)
- sqlloader6 (1)
- sqlloader7 (1)
- sql上报数据1 (1)
- sql上报数据2 (1)
- sql上报数据3 (1)
- sql上报数据4 (1)
- sql上报数据5 (1)
- sql上报数据6 (1)
- iputil1 (1)
- iputil2 (1)
- iputil3 (1)
- oracle sql1 (1)
- oracle sql2 (1)
- 线程池1 (0)
- 线程池3 (0)
- 日期处理1 (0)
- 日期处理2 (0)
- 日期处理3 (0)
- 日期处理4 (0)
- iputil4 (0)
- iputil5 (0)
- iputil6 (0)
- 日期处理6 (0)
- 日期处理7 (0)
- 日期处理8 (0)
- protocolList (0)
- DATELONG2TEXT (0)
- Dateinfo5 (0)
- Dateinfo6 (0)
- Dateinfo7 (0)
- Dateinfo8 (0)
- Dateinfo9 (0)
- Dateinfo10 (0)
- Dateinfo11 (0)
- Dateinfo12 (0)
- 处理ifream滚动条 (0)
- 工具面试题 (0)
- oracle1 (0)
- 批量插入数据 (0)
- oracle2 (0)
- oracle3 (0)
- oracle4 (0)
- oracle5 (0)
- oracle6 (0)
- oracle7 (0)
- oracle8 (0)
- oracle9 (0)
- oracle11 (0)
- oracle12 (0)
- oracle13 (0)
- oracle14 (0)
- oracle15 (0)
- http://zhang-xzhi-xjtu.iteye.com/category/133743 (1)
- 绑定变量 (0)
- 绑定变量2 (0)
- 绑定变量3 (0)
- 合理使用排序 (0)
- Jconsole 内存1 (0)
- Jconsole 内存2 (0)
- Jconsole 内存3 (0)
- io nio (0)
- nio (0)
- Batch (0)
- fetchsize (0)
- fetchsize2 (0)
- 面试题 (0)
- ExecutorService线程池 (0)
- 阻塞队列 (0)
- 简单阻塞队列实现 (0)
- 简单阻塞队列实现2 (1)
- CountDownLatch 结合线程应用 (0)
- 线程池 (0)
- 阻塞队列2 (0)
- LockSupport park unpark interrupt notifyAll wait等关系区别 (0)
- LockSupport park unpark interrupt notifyAll wait等关系区别1 (0)
- LockSupport park unpark interrupt notifyAll wait等关系区别2 (0)
- nio FileChannel (1)
- Nio Charset (0)
- nio 学习 (0)
- 杨化龙 (0)
- 排序1 (0)
- 排序2 (0)
- tomcat内存配置 (0)
- 字符串转换16进制数表示的字符串 (0)
- Dpi.report.common.TopnEdit (0)
- Dpi.report.common.TopnEdit2 (0)
- Dpi.report.common.TopnEdit3 (0)
- Dpi.report.common.TopnEdit4 (0)
- webservice调用 (0)
最新评论
package com.security.dpi.das.fileprocess;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//简单阻塞队列实现2
public class SimpleBlockingQ
{
public SimpleBlockingQ()
{
// TODO Auto-generated constructor stub
}
// Lock 替代了 synchronized 方法和语句的使用,Condition(await(),signalAll())
// 替代了 Object (wait(), notifyAll())监视器方法的使用。
// synchronzied Condition
// lock();
// unlock();
// wait(); await();
// notify(); signal();
// notifyAll(); signalAll();
// ReentrantLock和Synchronized
// Synchronized是Lock的一种简化实现,一个Lock可以对应多个
// Condition,而synchronized把Lock和Condition合并了,一个
// synchronized Lock只对应一个Condition,可以说Synchronized是
// Lock的简化版本。
// 在JDK 5,Synchronized要比Lock慢很多,但是在JDK 6中,它们的
// 效率差不多。
// 不要在Lock和Condition上使用wait、notiffy、notifyAll方法!
private Lock lock = new ReentrantLock();
// 一个锁可以创建多个Condition
private Condition notEmpty = lock.newCondition();
private Condition notFull = lock.newCondition();
private int maxLength = 10;
private Queue<Object> q = new LinkedList<Object>();
public Object take() throws InterruptedException {
lock.lock();
try {
if(q.size() == 0) {
// 要执行await操作,必须先取得该Condition的锁。
// 执行await操作之后,锁会释放。
// 被唤醒之前,需要先获得锁。
notEmpty.await();
}
if(q.size() != maxLength) { //判断是否满,满就叫醒其他线程来取 没有满继续移除
notFull.signalAll();
}
return q.poll();
} finally {
lock.unlock();
}
}
public void ofter() throws InterruptedException {
lock.lock();
try {
if(q.size() > 0) {
// 要执行signal和signalAll操作,都必须先取
// 得该对象的锁。
notEmpty.signalAll();
}
if(q.size() == maxLength) {
notFull.await(); // 如果满了就阻塞 需要其他线程来取 没满就添加
}
q.add(notEmpty);
} finally {
lock.unlock();
}
}
}
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
//简单阻塞队列实现2
public class SimpleBlockingQ
{
public SimpleBlockingQ()
{
// TODO Auto-generated constructor stub
}
// Lock 替代了 synchronized 方法和语句的使用,Condition(await(),signalAll())
// 替代了 Object (wait(), notifyAll())监视器方法的使用。
// synchronzied Condition
// lock();
// unlock();
// wait(); await();
// notify(); signal();
// notifyAll(); signalAll();
// ReentrantLock和Synchronized
// Synchronized是Lock的一种简化实现,一个Lock可以对应多个
// Condition,而synchronized把Lock和Condition合并了,一个
// synchronized Lock只对应一个Condition,可以说Synchronized是
// Lock的简化版本。
// 在JDK 5,Synchronized要比Lock慢很多,但是在JDK 6中,它们的
// 效率差不多。
// 不要在Lock和Condition上使用wait、notiffy、notifyAll方法!
private Lock lock = new ReentrantLock();
// 一个锁可以创建多个Condition
private Condition notEmpty = lock.newCondition();
private Condition notFull = lock.newCondition();
private int maxLength = 10;
private Queue<Object> q = new LinkedList<Object>();
public Object take() throws InterruptedException {
lock.lock();
try {
if(q.size() == 0) {
// 要执行await操作,必须先取得该Condition的锁。
// 执行await操作之后,锁会释放。
// 被唤醒之前,需要先获得锁。
notEmpty.await();
}
if(q.size() != maxLength) { //判断是否满,满就叫醒其他线程来取 没有满继续移除
notFull.signalAll();
}
return q.poll();
} finally {
lock.unlock();
}
}
public void ofter() throws InterruptedException {
lock.lock();
try {
if(q.size() > 0) {
// 要执行signal和signalAll操作,都必须先取
// 得该对象的锁。
notEmpty.signalAll();
}
if(q.size() == maxLength) {
notFull.await(); // 如果满了就阻塞 需要其他线程来取 没满就添加
}
q.add(notEmpty);
} finally {
lock.unlock();
}
}
}
相关推荐
以下是一个基于`wait()`和`notify()`的简单阻塞队列实现: ```java public class SimpleBlockQueue<T> { private int capacity; private LinkedList<T> queue = new LinkedList(); private int count; ...
Java中的阻塞队列实现主要依赖于`java.util.concurrent`包下的几个类,如`BlockingQueue`接口、`ArrayBlockingQueue`、`LinkedBlockingQueue`等。`BlockingQueue`接口定义了一组操作,如`put`、`take`、`offer`等,...
在提供的代码实例中,我们看到了一个简单的阻塞队列实现,使用了`LinkedList`作为底层数据结构,并通过`synchronized`关键字来实现线程安全。`enqueue`方法用于向队列尾部添加元素,`dequeue`方法用于从队列头部移除...
下面是一个简单的阻塞队列实现例子: ```java public class BlockingQueue { private List queue = new LinkedList(); private int limit = 10; public BlockingQueue(int limit) { this.limit = limit; } ...
### 10、阻塞队列BlockingQueue 实战及其原理分析 #### 一、阻塞队列概述 阻塞队列(BlockingQueue)是Java语言中...通过对不同阻塞队列实现的理解和掌握,可以更好地设计和优化高并发系统,提升系统的稳定性和性能。
Java中常见的阻塞队列实现包括: 1. `ArrayBlockingQueue`: 一个基于固定大小数组的阻塞队列,公平或非公平的锁策略可选。 2. `LinkedBlockingQueue`: 基于链表结构的阻塞队列,容量可以无限大,但内部维护了一个...
### 高性能阻塞队列的数据结构创新 #### 一、阻塞队列的概念与应用 **阻塞队列**是一种特殊的队列,它具备线程安全的特点,...在实际应用中,可以根据具体场景选择合适的阻塞队列实现方式,以达到最佳的并发效果。
本实例中使用了`ArrayBlockingQueue`,这是最常用的阻塞队列实现之一,它是一个有界队列,能够按FIFO(先进先出)的顺序处理元素。创建`ArrayBlockingQueue`时,需要指定队列的容量,这有助于防止内存溢出,因为队列...
在Java并发编程中,`LinkedBlockingQueue`是一种基于链表结构的阻塞队列,它在多线程环境下的性能表现优秀,常用于实现生产者消费者模型。这个队列的一个关键特性是其内部节点的链接方式,即每个元素都是一个节点,...
它可能包含了上述某一种或多种队列的实现,例如用C++、Java或其他编程语言实现的简单队列、阻塞队列、并发队列等。具体的实现细节需要查看源代码才能得知。 在实际应用中,队列常被用于任务调度、消息传递、网络...
2. **阻塞与非阻塞队列**: - **阻塞队列**:当队列为空时,尝试出队的操作会阻塞,直到有新的元素入队;同样,当队列已满时,尝试入队的操作也会阻塞,直到有其他线程执行出队操作释放了空间。这种方式有助于同步...
在对12节点SGI Challenge多处理器的实验中显示,新的非阻塞队列算法在性能上始终超越已知的最佳替代方案,特别是在提供通用原子原语(如比较并交换或条件加载存储)的机器上,它是首选算法。另一方面,两锁并发队列...
需要指定消息队列标识符、消息结构体指针、消息的长度以及控制标志,如是否阻塞等。 在描述中提到的`msgsend`函数,可能是一个自定义的函数,用来封装`msgsnd()`函数的调用。当用户输入'end'时,程序会结束,这可能...
- **阻塞队列**:在多线程环境中,当队列为空时,出队操作会阻塞,直到有新的元素入队;反之,当队列满时,入队操作也会阻塞。 ### 6. 编程实现 在Python中,可以使用内置的`collections.deque`实现队列,或者使用...
2. 使用JDK自带的DelayQueue:这是一个无界阻塞队列,元素需实现Delayed接口,当延迟时间到达时,元素可以从队列中取出。但这种方式不适用于分布式环境。 3. 消息中间件实现,如RabbitMQ:通过设置消息的存活时间...
Java wait和notifyAll实现简单的阻塞队列 在 Java 中,wait 和 notifyAll 是两个非常重要的方法,它们都是在 Object 类中声明的,用于实现线程之间的通信和同步。wait 方法会使调用线程进入等待状态,并释放所持有...
1. 简单队列:最基本的队列实现,只有入队和出队两种操作。 2. 循环队列:当队列满时,队尾指针回绕到队列的开头,形成循环,有效解决了满队问题。 3. 链式队列:使用链表作为底层数据结构,灵活且易于扩展。 4. ...
这个简单的例子展示了如何利用队列实现生产者-消费者模型。生产者(在此案例中是用户提交文章发布请求)将任务添加到队列,而消费者(后台线程)则负责从队列中取出并处理这些任务。由于队列的线程安全特性,多个...
// 如果已经是最高的优先级队列,进程被阻塞 block_process(current_process); } } else { // 执行进程 execute_process(current_process); } break; // 跳出循环,处理完一个进程就结束 } } } ``` 在...
Java的`java.util.concurrent`包提供了多种阻塞队列实现: 1. **ArrayBlockingQueue**:这是一个基于固定大小数组实现的阻塞队列。在创建时必须指定容量,且可选择是否采用公平的访问策略。公平策略意味着等待时间...