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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 亦金亦水 中级黑马   /  2014-6-10 19:15  /  1911 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

视频中看到关于多线程这块,创建锁的部分。

为什么要这样创建?
Lock lock = new ReentrantLock();
为什么不创建 Lock lock = new Lock()?

另外,为什么要创建
Condition notFull  = lock.newCondition();

4 个回复

倒序浏览
Lock lock = new ReentrantLock();

1,Lock是一个接口,只能通过它的具体实现,来创建锁对象。

Condition notFull  = lock.newCondition();

2,有了锁之后,还要有钥匙,才能实现开锁和上锁的功能,Condition就相当于这把锁的钥匙。

3,Lock替代的是synchronized,是一种显式的调用方式,需要在finally中显式的释放。

4,Condition中的await和signal、signalAll方法,替代了Object中的wait和notify、notifyAll方法。
Object的特点是,一把锁只有一把钥匙;Condition的特点是,一把锁可以有多把钥匙。
虽然condition可以有多个钥匙,但是开锁和上锁的钥匙,必须是同一把。
回复 使用道具 举报
谢振宣 发表于 2014-6-10 19:52
Lock lock = new ReentrantLock();

1,Lock是一个接口,只能通过它的具体实现,来创建锁对象。

请问 ReentrantLock类实现了Lock接口类,为什么不这样创建对象:
ReentrantLock ro = new ReentrantLock()
回复 使用道具 举报
Loke是接口啊。只能通过实现类来创建对象。
Lock lock = new ReentrantLock(); //这条语句使用了多态  楼主应该明白吧
而这个ReentrantLock类则是Loke接口的常用实现类

JDK1.5 中提供了多线程升级解决方案。
将同步Synchronized替换成现实Lock操作。
将Object中的wait,notify notifyAll,替换了Condition对象。
该对象可以Lock锁 进行获取。
该示例中,实现了本方只唤醒对方操作。


而关于这个语句

Condition notFull  = lock.newCondition();

Condition 实例实质上被绑定到一个锁上。要为特定 Lock 实例获得 Condition 实例,使用其 newCondition() 方法。

Condition类主要作用是替代同步代码块中wait notify notifyAll等方法


这样说能明白么。
回复 使用道具 举报
周小宁 发表于 2014-6-11 16:51
Loke是接口啊。只能通过实现类来创建对象。
Lock lock = new ReentrantLock(); //这条语句使用了多态  楼主 ...

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