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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在多线程当中,使用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

1 个回复

倒序浏览
自己顶顶!求技术达人指点!这里一个Lock有多个Condition,怎么知道某个线程是哪个Condition呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马