为什么 Java 对象可以充当锁和条件队列?
Why can a Java object act like a lock and a condition queue?
来自Java实践中的并发
Every Java object can implicitly act as a lock for purposes of synchronization; these built-in locks are called intrinsic locks or
monitor locks.
"Every Java object can implicitly act as a lock" 是什么意思?
是否意味着每个Java对象的class实现了如下Lock
接口?
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}
这是否意味着每个 Java 对象的 class 都提供了一些方法,使对象在鸭子类型的意义上像锁一样?
Just as each Java object can act as a lock, each object can also
act as a condition queue, and the wait, notify, and notifyAll
methods in Object constitute the API for intrinsic condition queues.
"each object can also act as a condition queue"是什么意思?
是否表示每个Java对象的class
- 实现一些 "condition queue" 接口,或
- 提供一些方法使对象在鸭子类型的意义上像条件队列一样?
谢谢。
不,这并不意味着每个 class 都实现了 Lock
接口(事实上,该接口是在每个对象都有一个 implicit monitor 自 Java).
引入后实际上就存在了
这只是意味着每个对象都有一个隐式监视器,允许它用作简单的互斥锁,如下所示:
synchronized (someObject) {
// this region is protected from concurrent execution by other threads
// locking on the same object
}
它也可以用于更复杂的监视器用例,例如 wait()
和 notify()
,这使得它可以充当一种条件变量(这可能是条件变量?).
这个决定的好处和缺点有些激烈的争论:虽然它确实意味着你不需要单独的互斥锁或条件变量对象,但它给实施带来了负担,因为 any object 可以以这种方式使用,尽管可能只有极少数的 objects 曾经如此。有很多实施技巧被用来降低这个成本。
从 Java 5 开始,现在 JDK 提供了许多显式同步原语,包括各种 Lock
实现。
来自Java实践中的并发
Every Java object can implicitly act as a lock for purposes of synchronization; these built-in locks are called intrinsic locks or monitor locks.
"Every Java object can implicitly act as a lock" 是什么意思?
是否意味着每个Java对象的class实现了如下Lock
接口?
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long timeout, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}
这是否意味着每个 Java 对象的 class 都提供了一些方法,使对象在鸭子类型的意义上像锁一样?
Just as each Java object can act as a lock, each object can also act as a condition queue, and the wait, notify, and notifyAll methods in Object constitute the API for intrinsic condition queues.
"each object can also act as a condition queue"是什么意思?
是否表示每个Java对象的class
- 实现一些 "condition queue" 接口,或
- 提供一些方法使对象在鸭子类型的意义上像条件队列一样?
谢谢。
不,这并不意味着每个 class 都实现了 Lock
接口(事实上,该接口是在每个对象都有一个 implicit monitor 自 Java).
这只是意味着每个对象都有一个隐式监视器,允许它用作简单的互斥锁,如下所示:
synchronized (someObject) {
// this region is protected from concurrent execution by other threads
// locking on the same object
}
它也可以用于更复杂的监视器用例,例如 wait()
和 notify()
,这使得它可以充当一种条件变量(这可能是条件变量?).
这个决定的好处和缺点有些激烈的争论:虽然它确实意味着你不需要单独的互斥锁或条件变量对象,但它给实施带来了负担,因为 any object 可以以这种方式使用,尽管可能只有极少数的 objects 曾经如此。有很多实施技巧被用来降低这个成本。
从 Java 5 开始,现在 JDK 提供了许多显式同步原语,包括各种 Lock
实现。