锁定后总是会出现try/finally块,为什么?

ReentrantReadWriteLock readWriteLockBitmap = new ReentrantReadWriteLock();
Lock read = readWriteLockBitmap.readLock();
Lock write = readWriteLockBitmap.writeLock();
int shared = 0;

public void function1(){
    read.lock();
    try{
        //reading shared int
    }
    finally{
        read.unlock();
    }
}

public void function 2(){
    write.lock();
    try{
        //modify shared int
    }
    finally{
        write.unlock();
    }
}

为什么要尝试/最终阻止而不是简单地编写如下代码:
ReentrantReadWriteLock readWriteLockBitmap = new ReentrantReadWriteLock();
Lock read = readWriteLockBitmap.readLock();
Lock write = readWriteLockBitmap.writeLock();
int shared = 0;

public void function1(){
    read.lock();
    //reading shared int
    read.unlock();
}

public void function 2(){
    write.lock();
    //modify shared int
    write.unlock();
}

最佳答案

万一出了什么问题(抛出异常等),您无论如何都要确保释放了锁。这只是标准做法,即使从技术上讲在这种情况下也没有必要。

关于java - 线程-为什么必须先尝试锁然后最终锁定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6950078/

10-12 14:33