黑马程序员技术交流社区

标题: java多线程Lock和Condition的疑惑 [打印本页]

作者: 李克强001    时间: 2015-10-1 17:49
标题: java多线程Lock和Condition的疑惑
在多线程当中,使用Condition对象来标记不同的线程,这样能够灵活的对特定功能的线程进行等待或者唤醒。问题在于:不同的条件是什么时候和不同的线程进行绑定的?       比如下面是帮助文档上面提供的例子,在执行 notFull.await()的时候,哪个线程的Condition是notFull,并不知道啊?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;//如果写索引写到队列的最后一个位置了,那么置为0             ++count;//个数++             notEmpty.signal();//唤醒读线程           } finally {             lock.unlock();           }         }  

111.jpg (140.2 KB, 下载次数: 0)

111.jpg

作者: 李克强001    时间: 2015-10-1 17:59
自己顶顶!求技术达人指点!这里一个Lock有多个Condition,怎么知道某个线程是哪个Condition呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2