黑马程序员技术交流社区
标题:
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)
下载附件
2015-10-1 17:45 上传
作者:
李克强001
时间:
2015-10-1 17:59
自己顶顶!求技术达人指点!这里一个Lock有多个Condition,怎么知道某个线程是哪个Condition呢?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2