黑马程序员技术交流社区
标题:
线程中的锁
[打印本页]
作者:
treecolor166
时间:
2013-12-29 00:43
标题:
线程中的锁
同步函数的锁是this,调用lock.lock()方法获取到的锁是什么
作者:
776699
时间:
2013-12-29 02:36
多线程操作的 同步代码快中,共享的对象 ;
作者:
胡永城
时间:
2013-12-29 03:14
lock()方法相当于synchronized代码块,其中监视器(就是锁)是newCondition() 方法返回的Condition 对象。
newCondition() 返回绑定到此 Lock 实例的新 Condition 实例。
作者:
zzmxhm
时间:
2013-12-29 13:30
昨天刚复习了多线程,来尝试详细地解释一下~
多线程编程中实现同步的基本机制是锁(lock)和条件(condition)。锁可以保证共享资源不会被多个线程同时访问,使用条件(condition)可以在不满足某种限制时释放掉线程所占有的锁并进入该条件(condition)的等待队列,以下是使用锁和条件的常用结构:
Lock lock = ... // 声明一个 Lock 对象
Condition cond = lock.newCondition(); // 获取该 Lock 对象的一个条件
lock.lock(); // 获取锁
try {
// 判断是否满足某个限制,例如账户金额是否充足
while (!someCondition) {
// 如不满足限制,释放锁并进入条件的等待队列
cond.await();
}
...
// 唤醒该条件等待队列中的线程
cond.signalAll();
} finally {
// 释放锁
lock.unlock();
}
复制代码
当使用 Synchronized 关键字进行同步管理时,也是相同的原理,只不过此时不用显示声明锁和条件,而是自动地使用对象的固有锁和对应的条件。因此可以如下理解 Synchronized 关键字:
public synchronized void method() {
...
while (!someCondition) {
wait();
}
...
notifyAll();
}
等价于
// 这里的 this.intrinsicLock 和 intrinsicCondition 代表该对象的固有锁和与该锁相关联的条件
public void method() {
this.intrinsicLock.lock();
try {
...
while (!someCondition) {
intrinsicCondition.await();
}
...
intrinsicCondition.signalAll();
} finally {
this.intrinsicLock.unlock();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2