黑马程序员技术交流社区
标题:
有关线程的问题
[打印本页]
作者:
代文娟
时间:
2013-11-13 20:55
标题:
有关线程的问题
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();//t1,t2
this.name = name+"--"+count++;
System.out.println(Thread.currentThread().getName()+"...生产者.."+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()+"...消费者........."+this.name);
flag = false;
condition_pro.signal();
}
finally
{
lock.unlock();
}
}
}
复制代码
在老师写的代码中这两句话 private Condition condition_pro = lock.newCondition();
private Condition condition_con = lock.newCondition();
怎么能判断condition_pro就是获取的是生产者的锁,condition_con就是获取的是消费者的锁呢?
这块不太明白,请大家帮我解释解释。
作者:
zuiaichiyu
时间:
2013-11-13 21:48
本帖最后由 zuiaichiyu 于 2013-11-13 21:51 编辑
我觉得你是被老师的命名误导了,然其实这两个锁跟是生产者的还是消费者的没有关系,condition_pro 和condition_con 只是通过实现Lock绑定到锁上的两个实例对象,你查下JDK,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。conditon就是将监视器中的wait notify notifyAll分成了不同的对象,lock.lock()拿到锁后,判断是否可以执行,如果不能,condition调用await()方法,就相当于普通的对象的wait()方法,所以不要想condition是消费者还是生产者的
作者:
代文娟
时间:
2013-11-14 13:45
明白了,多谢啦
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2