Java并发,监视Lock

时间:2016-02-03 20:53:59

标签: java concurrency locking

我在我的应用程序中使用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)一样?

1 个答案:

答案 0 :(得分:2)

整个对象在这里没有任何特殊含义。监视器意味着锁定和条件的组合,因此可以原子地执行检查和阻止,直到发生某些事情,请参阅wiki Monitor

lock.lock ()synchronized关键字类似,但Lock提供了更大的灵活性。除其他外,它可以创建条件,允许通知完整/空状态并连接到此Lock

相关问题