线程通信升级版
来源:互联网 发布:买卖时机软件下载 编辑:程序博客网 时间:2024/03/29 01:34
package com.huowolf;/* * jdk1.5升级版线程通信示例 * 将同步中的 synchronized替换成显示的Lock操作 * 将Object中的wait().notify(),notify() ,替换成了Condition对象的方法, * 该对象可以由Lock锁,进行获取。 * *本例中,实现了本方只唤醒对方的操作。
*达到生成一次消费一次的目的 */import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class Resource { private String name; private int count = 1; private boolean flag =false; private Lock lock = new ReentrantLock();//一个可重入的互斥锁定 Lock private Condition condition_pro = lock.newCondition();//Condition 替代了 Object 监视器方法的使用 private Condition condition_con = lock.newCondition(); public void set(String name) throws Exception { lock.lock(); try{ while(flag) { condition_pro.await(); } this.name = name+"--"+count++; System.out.println(Thread.currentThread().getName()+"...生产者..."+this.name); flag = true; condition_con.signal(); } finally { lock.unlock(); } } public void out() throws Exception {lock.lock();try {while(!flag) {condition_con.await();}System.out.println(Thread.currentThread().getName()+"...消费者..."+this.name);flag = false;condition_pro.signal();}finally{lock.unlock();}}}class Producer implements Runnable {private Resource res;public Producer(Resource res) {this.res = res;}public void run() {while(true) {try {res.set("商品");} catch (Exception e) {e.printStackTrace();}}}}class Consumer implements Runnable {private Resource res;public Consumer(Resource res) {this.res = res;}@Overridepublic void run() {while(true) {try {res.out();} catch (Exception e) {e.printStackTrace();}}}}public class ProducerConsumerDemo {public static void main(String[] args) {Resource r = new Resource();Producer pro = new Producer(r);Consumer con = new Consumer(r);Thread t1 = new Thread(pro);Thread t2 = new Thread(pro);Thread t3 = new Thread(con);Thread t4 = new Thread(con);t1.start();t2.start();t3.start();t4.start();}}
0 0
- 线程通信升级版
- JAVA 线程间通信 -生产者消费者JDK5.0升级版
- JAVA 线程间通信 -生产者消费者JDK5.0升级版
- Java基础学习__多线程(线程间通信--生产者消费者JDK5.0升级版)
- 多线程——线程间通信{JDK1.5升级版 Lock;Conditon}
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 线程通信
- 关于使用speex进行音频压缩
- Mysql热备增量备份与恢复(-)--备份部分
- cocos2d-x提示'__useHeader' : macro redefinition的解决方法
- 使用SmartUpload 上传图片时所遇到的问题
- 百度地图API上手
- 线程通信升级版
- jsp错误页面打印日志
- ios之NSSet 使用技巧总结
- Mysql热备增量备份与恢复(二)--备份部分查看
- Centos 6.5下配置tgt后端存储为ceph
- centos 安装stardict星际译王
- 基于ibcurl的跨平台多线程断点续传下载库
- android打包准备:混淆第三方jar包(Gson, greenDao,sharesdk,UIL,高德地图, unity,pinyin4j,async http,JPush,EventBus等)
- C++进行base64编码和解码