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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 。。。。。。。 中级黑马   /  2013-11-7 10:10  /  1126 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这两句代码是什么意思?API文档看不懂,帮我读一下,谢谢

Lock lock = new ReentrantLock();

Condition condition = lock.newCondition();

1 个回复

倒序浏览
这是JDK1.5之后提供的多线程的升级解决方法。它的出现是为了替换synchronized关键字的同步操作。

java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,而且在多线程都想访问共享资源的处理山更优越一些。

1.Lock lock = new ReentrantLock();

因为ReentrantLock 类是Lock类的子类,通过多态,Lock lock = new ReentrantLock();父类变量指向一个子类对象。当然你也可以写成ReentrantLock lock = new ReentrantLock();我们需要的就是ReentrantLock的对象,因为ReentrantLock提供了Condition,对线程的等待和唤醒等操作更加灵活,一个ReentrantLock可以有多个Condition实例,所以更有扩展性。同时为下一个语句的出现做了准备。
需要注意的是lock 必须在 finally 块中释放。否则,如果受保护的代码将抛出异常,锁就有可能永远得不到释放!

2.Condition condition = lock.newCondition();

条件变量Condition,很大一个程度上是为了解决Object.wait/notify/notifyAll难以使用的问题而出现的。
而Lock中产生一个条件变量的方法是Lock.newCondition()。所以语句Condition condition = lock.newCondition();的作用就是通过ReentrantLock(继承了Lock)的对象将条件变量condition与锁绑定。从而用来调用wait/notify/notifyAll这些方法。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

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