Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java并发性,锁监视器_Java_Concurrency_Locking - Fatal编程技术网

Java并发性,锁监视器

Java并发性,锁监视器,java,concurrency,locking,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()

我正在我的应用程序中使用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();
        }
    }

在本例中,当调用deposit方法时,整个对象是monitor还是only lock?这就像使用
synchronize(This)
锁定整个实例一样?

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

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