我在我的应用程序中使用Lock,我想知道在这种情况下监视器是什么:
public class BoundedBuffer {
private final String[] buffer;
private final int capacity;
private int front;
private int rear;
private int count;
private final Lock lock = new ReentrantLock();
private final Condition notFull = lock.newCondition();
private final Condition notEmpty = lock.newCondition();
public BoundedBuffer(int capacity) {
super();
this.capacity = capacity;
buffer = new String[capacity];
}
public void deposit(String data) throws InterruptedException {
lock.lock();
try {
while (count == capacity) {
notFull.await();
}
buffer[rear] = data;
rear = (rear + 1) % capacity;
count++;
notEmpty.signal();
} finally {
lock.unlock();
}
}
在这个例子中,当调用存款方法时,整个对象是监控还是仅锁定?这就像使用锁定整个实例的synchronize(this)
一样?
答案 0 :(得分:2)
整个对象在这里没有任何特殊含义。监视器意味着锁定和条件的组合,因此可以原子地执行检查和阻止,直到发生某些事情,请参阅wiki Monitor。
lock.lock ()
与synchronized
关键字类似,但Lock
提供了更大的灵活性。除其他外,它可以创建条件,允许通知完整/空状态并连接到此Lock
。