A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马连家华 中级黑马   /  2012-3-26 16:53  /  1749 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Noword 于 2012-3-26 16:57 编辑

private Lock lock = new ReentrantLock();
private Condition con = lock.new Condition();

...上面两句都什么意思啊...每一句都看不懂..表笑我.人笨没办法...多听多学多问就能会
上两句又有什么联系呢..
con.await();

7 个回复

倒序浏览

回帖奖励 +1

private Lock lock = new ReentrantLock();
       Lock是一个借口  ReentrantLock  是实现Lock的接口的类       相当于用父类引用创建了一个子类对象   
private Condition con = lock.new Condition();
     而  newCondition() 是ReentrantLock 类中的一个方法   返回用来与此 Lock 实例一起使用的 Condition 实例对象
     这样lock锁 就色condition中的  await  signal等方法练习起来了  
    比如Synchronized 的锁是 Object的  而wait notify  相当于都要属于object这个锁得方法  才能使得方法和锁之间建立联系
  而lock中   只不过把这些抽象的东西显示出来了而已
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-26 17:16
private Lock lock = new ReentrantLock();
       Lock是一个借口  ReentrantLock  是实现Lock的接口的类  ...

好像...懂一点儿了~
回复 使用道具 举报

回帖奖励 +1

本帖最后由 李晓旭 于 2012-3-26 17:28 编辑

private Lock lock = new ReentrantLock();
创建一个Lock接口的的子类实现对象
Lock 是一个接口,ReentrantLock是Lock接口的一个实现类
ReentrantLocks是一个互斥锁,我觉得就是把同步代码块synchronized(Object){ ...... }用对象来划分了
所以想要创建一个关于Lock的对象就要创建Lock实现的子类对象,也算是一种多态形式.

private Condition con = lock.new Condition();
这个是配合Lock接口使用的条件,相当于不同的Object监视器可以分别使用(wait,notify,notifyAll)
其实就是相当于,Condition代替了同步代码块中的Object锁
不同的锁互不影响,并且可以分别控制

回复 使用道具 举报
class BoundedBuffer {
   final Lock lock = new ReentrantLock();
   final Condition notFull  = lock.newCondition();
   final Condition notEmpty = lock.newCondition();

   final Object[] items = new Object[100];
   int putptr, takeptr, count;

   public void put(Object x) throws InterruptedException {
     lock.lock();
     try {
       while (count == items.length)
         notFull.await();
       items[putptr] = x;
       if (++putptr == items.length) putptr = 0;
       ++count;
       notEmpty.signal();
     } finally {
       lock.unlock();
     }
   }

   public Object take() throws InterruptedException {
     lock.lock();
     try {
       while (count == 0)
         notEmpty.await();
       Object x = items[takeptr];
       if (++takeptr == items.length) takeptr = 0;
       --count;
       notFull.signal();
       return x;
     } finally {
       lock.unlock();
     }
   }
}
回复 使用道具 举报
有这种好事啊!!!
回复 使用道具 举报

回帖奖励 +1

金钱啊!
回复 使用道具 举报
庞子华 发表于 2012-3-26 20:06
金钱啊!

..................................................
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马