Java NIO - Condition
来源:互联网 发布:淘宝推广怎么做 编辑:程序博客网 时间:2024/06/08 17:58
Condition用来实现对应Object的wati,notify,notifyAll三个方法。
在Condition中用await()替换wait(),用signal()替换notify() ,用signalAll()替换notifyAll(),传统线程之间的通讯Condition都可以实现。如下列子,我们实现一个读写操作,分为读写线程。
package chp3.condition;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class BufferThread {
final Lock lock = new ReentrantLock();// 锁
final Condition notFull = lock.newCondition();// 写线程条件
final Condition notEmpty = lock.newCondition();// 读线程条件
final Object[] items = new Object[10];// 缓存队列
int putptr/* 写索引 */, takeptr/* 读索引 */, count/* 队列中存在的数据个数 */;
public void put(Object x) throws InterruptedException {
lock.lock();
try {
while (count == items.length) {
notFull.await();// 阻塞写线程
}
System.out.println("写入操作: index = " + putptr + " value = " + x);
items[putptr++] = x;
if (putptr == items.length)
putptr = 0;// 如果写索引写到队列的最后一个位置了,那么置为0
++count;// 个数++
notEmpty.signal();// 唤醒读线程
} finally {
lock.unlock();
}
}
public Object take() throws InterruptedException {
lock.lock();
try {
while (count == 0)
// 如果队列为空
notEmpty.await();// 阻塞读线程
Object x = items[takeptr];// 取值
System.out.println("读取操作: index =" + takeptr + " vale = " + x);
if (++takeptr == items.length)
takeptr = 0;// 如果读索引读到队列的最后一个位置了,那么置为0
--count;// 个数--
notFull.signal();// 唤醒写线程
return x;
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
final BufferThread bt = new BufferThread();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 250; i++)
try {
bt.put(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 230; i++)
try {
bt.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();
t2.start();
}
}
参考:http://blog.csdn.net/ghsau/article/details/7481142
0 0
- Java NIO - Condition
- java Condition
- Condition Variables JAVA多线程
- java中的Condition
- java Condition源码分析
- Java Lock Condition
- java lock condition
- 码农小汪-Java Condition
- Java 多线程:Condition关键字
- java多线程--condition条件
- 《Java源码分析》:Condition
- JAVA多线程之Condition
- java并发-Condition接口
- Java多线程之Condition
- Java多线程--Condition接口
- 《Java源码分析》:Condition
- java中的condition
- Java Condition类
- 驱动程序环境搭配(VS2010 + WDK + VirtualDDK + VMware)
- Android Studio 日常使用的插件
- 在android中使用单元测试框架
- mysql-5.6.14-winx64免安装配置
- Selenium ide录制脚本回放出现问题
- Java NIO - Condition
- 【总结】PHP常见面试题汇总(四)。。。
- Linux基础07_管线命令与命名历史
- 堆、栈在内存中的存储位置----详解
- C++实验3-个人所得税计算
- SSDT Hook
- Java中@Override的作用
- Swift项目里使用Objective-C第三方库的总结
- linux串口编程--规范模式和非规范模式及read的阻塞与非阻塞