2 qq 28438651 qq_28438651 于 2017.01.01 20:34 提问

java一个锁两个监视器

class Resource
{
private String name;
private int count = 1;
private boolean flag = false;

// 创建一个锁对象。
Lock lock = new ReentrantLock();

//通过已有的锁获取该锁上的监视器对象。

// Condition con = lock.newCondition();

//通过已有的锁获取两组监视器,一组监视生产者,一组监视消费者。
Condition producer_con = lock.newCondition();
Condition consumer_con = lock.newCondition();


通过一个锁获取了2个监视器。怎么确保producer-con监视producer(生产者)。。。然后consumer-con监视consumer(消费者)呢。。。想了好久不明白、、

2个回答

caozhy
caozhy   Ds   Rxr 2017.01.01 20:42

消费者-生产者问题的关键在于,需要保证 读取-数据处理/判断-写回 三者原子事务性,所以需要加锁。一般来说只要1个就足够了。
你的程序用了2个,看下代码才能明白作者想干嘛。

oyljerry
oyljerry   Ds   Rxr 2017.01.01 20:44

生产消费者模型一个condition就可以了,生产者,消费者都用它,生产者有数据了就通过它通知消费者开始干活

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
经典解释监视器和对象锁
cathy97问:在JVM的规范中,有这么一些话:     “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”       “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”     “锁住了一个对象,就是获得对象相关联的监视器”         从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何? interhanchi
java中线程同步Synchronized,监视器monitor和锁lock的关系是什
既然有关监视器monitor的概念比较难,大家怎么解释的都有。首先我给出一下java的官方文档,也是最权威的解释: Synchronizationis built around an internal entity known as the intrinsic lock ormonitor lock. (The API specification often refers to this ent
java 内在锁(intrinsic lock)或者监视器锁(monitor lock)
在JVM的规范中,有这么一些话:  “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的,为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁,锁住了一个对象,就是获得对象相关联的监视器”  监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的那个特别的房间叫做"获得监视器",占据房间叫做"
JAVA中一个Lock锁中多个condition监视器的问题
https://yq.aliyun.com/ask/14319 在一个同步程序中,如果定义了一个Lock锁,同时在这一个锁上创建两个condition监视器con1和con2,如果操作con1.signalAll(),那么唤醒的是Lock这个锁里全部等待的线程还是只唤醒被con1这个监视器await的线程呢? con1只是唤醒在con1这个对象上的阻塞队列里的对象.
[疯狂Java]线程同步:同步监视器、同步方法、同步锁、死锁
1. 并发访问带来的线程安全问题:     1) 设想当多个线程刚好在同时时间访问一个公共资源时会怎么样?     2) 如果仅仅是读取那个资源那没什么问题,但如果要修改呢?同时修改必然会发生冲突导致数据不一致的错误(最典型的就是同时写一个文件);     3) 在实际问题中最典型的就是银行取钱问题,如果多人刚好同时用同一个账号取钱就会发生错误,而这种错误往往是非常严重的错误;     4
java synchronized 关键字(1)对象监视器为Object
在java多线程中 synchronized 是非常重要的,也是经常用到的对于synchronized关键字要注意两点synchronized对象监视器为Object的时候 synchronized对象监视器为Class的时候对象监视器为Object也就是
java多线程学习笔记——synchronized关键字
一、synchronized关键字概述 JAVA中每一个对象都有一个内部锁,如果一个方法用synchronized关键字声明,那么对象的锁将保护整个方法。也就说,要调用该方法,线程必须获得内部的对象锁。下面两段代码等价:public synchronzied void method(){ method body }等价于:public void method(){ this.int
java----内置监视器
监视器(monitor)是一个相互排斥且具备同步能力的对象。监视器中的一个时间点上,只能有一个线程执行一个方法。线程通过获取监视器上的锁进入监视器,并且通过释放锁退出监视器。任意对象都可能是一个监视器。一旦一个线程锁住对象,该对象就成为监视器。加锁是通过在方法或块上使用synchronized关键字来实现的。在执行同步方法或块之前,线程必须获得锁。如果条件不适合线程继续在监视器内执行,县城可能在监视
java中重入ReentrantLock(Condition监视器)锁生产者消费者
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /*  本程序致力于解决多出现多个生产者,多个消费者的时候,依然能够达到生产一次,消费一次的功能  :
Synchronized 互斥块(对象锁) 一个对象和一个monitor 的关系
Synchronized  :锁住的是对象,出现synchronized表示随后的代码块要用到共享数据了,要锁住了。一、3种形式。1、synchronized(obj):可以任意指定对象.2、synchronized(this):当前对象:当一个类加到内存时,常量池有一个地址直接指向当前正在执行的对象. 3、public synchronized void run():当前对象(this),这是实...