只唤醒对方
2015-10-19 10:14
239 查看
package comm; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ProducerConsumerDemo2 { 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(); } } class Resource { private String name; private int count = 1; private boolean flag = false; private Lock lock = new ReentrantLock(); private Condition condition_pro = lock.newCondition(); private Condition condition_con = lock.newCondition(); public void set(String name) throws InterruptedException { lock.lock(); try { while (flag) condition_pro.await(); this.name = name + "==" + (count++); System.out.println(Thread.currentThread().getName() + "==producer==" + this.name); flag = true; condition_con.signal(); // 唤醒对方 } finally { lock.unlock(); } } public void out() throws InterruptedException { lock.lock(); try { while (!flag) condition_con.await(); System.out.println(Thread.currentThread().getName() + "====consumer====" + this.name); flag = false; condition_pro.signal(); // 唤醒对方 } finally { lock.unlock(); } } } class Producer implements Runnable { private Resource res; Producer(Resource res) { this.res = res; } public void run() { while (true) { try { res.set("+商品+"); } catch (InterruptedException e) { } } } } class Consumer implements Runnable { private Resource res; Consumer(Resource res) { this.res = res; } public void run() { while (true) try { res.out(); } catch (InterruptedException e) { } } }
相关文章推荐
- Maven War包 POM配置文件 设置最佳实践
- iOS中Bitcode的介绍及配置
- 四元数介绍
- Linux伙伴系统(五)--通过迁移类型分组来实现反碎片
- 织梦采集用
- Qt编译问题笔记
- leetcode --Number of 1 Bits
- 相册图片选取,图片压缩和图片jpg、png格式的转换
- 一致性哈希算法(consistent hashing)
- jsp文件中的一些写法
- 新手安装wordpress之后的问题汇总
- 阻塞队列实现
- Nodejs学习笔记之Stream模块
- Git学习 -- 简介
- voip 音频系列专题之------序言
- 修改mysql用户密码之后 phpmyadmin报1054错误
- android默认设置修改
- Android 模拟器方向键和键盘方向键不能用
- Linux伙伴系统(四)--释放页
- Jackson如何实现json字符串和泛型List集合之间的转换