Java 多线程 (PART XVIII) Lock(II)用lock实现生产者消费者模式
来源:互联网 发布:10月外贸数据 编辑:程序博客网 时间:2024/05/18 02:03
Object和Condition
Object类中的方法有很多可以使用Condition中的方法来代替。
由这张表可以得知,Condition类可以实现线程通信。
Lock &&Condition 实现生产者/消费者模式
示例代码:
package hello;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;class ObjectValue { public static String Value = "";}class Service { private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); public void setValue() { try { lock.lock(); while (!ObjectValue.Value.equals("")) { condition.await(); } String value = System.currentTimeMillis() + "_" + System.nanoTime(); System.out.println("set的值是:" + value); ObjectValue.Value = value; condition.signal(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { lock.unlock(); } } public void getValue() { try { lock.lock(); while (ObjectValue.Value.equals("")) { condition.await(); } System.out.println("get 的值是:" + ObjectValue.Value); ObjectValue.Value = ""; condition.signal(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { lock.unlock(); } }}class ThreadP extends Thread { private Service service; public ThreadP(Service service) { this.service = service; } @Override public void run() { while (true) { this.service.setValue(); } }}class ThreadC extends Thread { private Service service; public ThreadC(Service service) { this.service = service; } @Override public void run() { while (true) { this.service.getValue(); } }}public class Main { public static void main(String[] args) { Service service = new Service(); ThreadP threadp = new ThreadP(service); threadp.start(); ThreadC threadc = new ThreadC(service); threadc.start(); }}
和synchronized(Object lock)差不多:
运行结果:
部分
set的值是:1507639004441_32000465052113get 的值是:1507639004441_32000465052113set的值是:1507639004441_32000465066481get 的值是:1507639004441_32000465066481set的值是:1507639004441_32000465078797get 的值是:1507639004441_32000465078797set的值是:1507639004441_32000465090702get 的值是:1507639004441_32000465090702set的值是:1507639004441_32000465103018get 的值是:1507639004441_32000465103018set的值是:1507639004441_32000465114923get 的值是:1507639004441_32000465114923set的值是:1507639004441_32000465129702get 的值是:1507639004441_32000465129702set的值是:1507639004441_32000465141607get 的值是:1507639004441_32000465141607set的值是:1507639004441_32000465153922
阅读全文
0 0
- Java 多线程 (PART XVIII) Lock(II)用lock实现生产者消费者模式
- JAVA多线程(五)用lock、synchronized、阻塞队列三种方法实现生产者消费者模式
- 多线程——用Lock(锁)和Condition(监听器)来优化生产者消费者模式
- 用Lock对象来同步线程,实现生产者消费者模式
- 多线程-生产者消费者lock锁
- java多线程学习笔记(七) ——消费者与生产者(LOCK、Condition接口)
- Java多线程编程4--Lock的实例--实现生产者/消费者模式:一对一、多对多交替打印
- Java实现生产者与消费者(四)(多生产者与多消费者使用lock同步锁)
- Java并行编程-lock中使用多条件condition(生产者消费者模式实例)
- Java 多线程 (PART XVII) Lock (I) Lock实现线程同步
- Java多线程-Lock锁的使用,以及生产者和消费者的实现
- java多线程---等待/唤醒以及生产者消费者经典同步Lock的实现
- java多线程之多生产者与多消费者案例之Lock和Condition实现方式
- 生产者和消费者 用Lock控制多线程共享资源
- JAVA多线程(三)生产者消费者模式及实现方法
- java多线程(2)-实现生产者/消费者模式
- 多线程生产者消费者Demo2_ Lock操作
- Java语言synchronized与lock实现生产者消费者
- 全排列的实现方法+字典序输出
- linux 下安装redis以及php Redis扩展
- 蓝桥杯基础练习 01字串
- 浏览器HTTP缓存机制
- 密码翻译
- Java 多线程 (PART XVIII) Lock(II)用lock实现生产者消费者模式
- Gym
- 设计模式
- 我
- Django项目中如何在模板文件中加载静态文件
- Spring面试题分享()
- Find The Multiple(深搜找倍数)
- java excel WriteExcelAndCSVUtils
- bzoj1225: [HNOI2001] 求正整数