- 浏览: 23600 次
文章分类
- 全部博客 (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();
}
}
}
相关推荐
Java实现简单的阻塞队列2种方式,1使用wait(),notify();2使用countdownlatch实现
基于Linux实现简单的队列功能。本代码实现了阻塞和非阻塞方式出入队列。同时是线程安全的。如果队列满,在入队时可以指定最大超时。如果队列空,可以在出队时指定最大超时。
主要介绍了Java wait和notifyAll实现简单的阻塞队列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Redis是什么? Redis是一个简单的,高效的,分布式的,基于内存的缓存工具。...需要实现分布式队列,至少要有一个master(192.168.45.1)和一个slave(192.168.45.130) linux下默认配置文件在/etc/redis/
Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去...
阻塞队列提供了一些简单,高性能,常规的安全队列,可用作资源池或作业队列。 主要重点是在不牺牲可读性的前提下实现简单性和高性能。 实际上,我试图提供有关代码的良好文档以及一些用法示例。 提供的队列 ...
Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 class Queue.Queue(maxsize=0) FIFO即First ...
在之功能基础上扩展实现了任务阻塞延时功能。
2、 定义进程状态转换方式:进程的状态转换是由进程内部操作或操作系统的控制引起,由于无法实现这些功能,学生可以采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。随机方法指产生1-6的随机数,分别代表...
针对需求1、2: 为实现多个进程并发运行需要建立管理对象和进程对象的联系以便对运行的进程进行管理,故可以在管理对象中设置就绪、阻塞、运行队列来容纳进程,从而方便的进行管理; ①创建:初始化刚建立的进程对象...
文章目录一、线程池组成二、线程安全队列的实现三、测试逻辑3.1、测试阻塞逻辑3.2、测试读写加锁逻辑 一、线程池组成 一个完整的线程池由下面几部分组成,线程安全队列、任务对象、线程处理对象、线程池对象。其中...
2、 定义进程状态转换方式:进程的状态转换是由进程内部操作或操作系统的控制引起,由于无法实现这些功能,学生可以采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。随机方法指产生1-6的随机数,分别代表...
利用c++模拟进程的调度。...(4 分) 按先进先出方式管理就绪和阻塞队列,按队列输出进程状态 (2 分) 完成可变分区的分配与回收 (3 分) 界面清晰友好 (2 分) 实验结束后撰写实验报告(5 分)。
2、 定义进程状态转换方式:进程的状态转换是由进程内部操作或操作系统的控制引起,由于无法实现这些功能,学生可以采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。随机方法指产生1-6的随机数,分别代表...
提出了在无线移动网中基于队列的降质接纳控制算法,它区分了实时业务和非实时业务,同时考虑了切换优先和业务优先两...性能分析结果显示该算法简单易实现,具有较低的新呼叫阻塞率、切换呼叫中断率和较高的系统利用率。
最近我在用梯度下降算法绘制神经网络的数据时,遇到了一些算法性能的问题。... 我不想用一个像 cerely(一种分布式任务队列)一样大而全的任务队列框架,因为框架对于我的这点需求来说太重了,并且我的绘图也并不
一、线程池 1、为什么需要使用线程池 1.1 创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率。 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3,如果T1+T3>T2,...2、
有实验源码和实验报告,附有实验算法流程图。实验一:进程控制、实验二:分页式存储管理...按先进先出的方式管理就绪和阻塞队列,按队列输出进程状态4.完成可变分区的分配和回收5.界面清晰友好6.实验结束后撰写实验报告
利用简单的结构和控制方法模拟进程结构、进程状态和进程控制。 内容: 1.能够模拟进程的创建与...3.按先进先出方式管理就绪和阻塞队列,能够按队列形式输出进程状态 4.完成可变分区的分配与回收,分配用最佳适应方式;
简单SQLite支持的队列,可使用setImmediate()在Node.js中运行许多短任务 如果您有大量正在运行的小型任务,则该库将允许它们通过node.js的主事件线程按顺序执行,而不会阻塞/使其他node.js事件处于饥饿状态。 描述 ...