相关疑难解决方法(0)

我们如何使用最后尝试Lock.lock和Lock.unlock

请考虑以下代码.为了防止IndexOutOfBoundsException在调用时listIterator,我们使用读取器锁来检索基于索引的iteartor,并在写入操作时使用写入器锁定其他位置stockCodes.

请注意,我们没有使用任何锁定机制来迭代使用listIterator,因为它来自CopyOnWriteArrayList.不需要锁定,因为ConcurrentModificationException不应该抛出.

// stockCodesReaderLock is reader lock from java.util.concurrent.locks.ReadWriteLock
// stockCodes is CopyOnWriteArrayList
// Acquire iterator in a safe way.
stockCodesReaderLock.lock();
final int stockCodesSize = stockCodes.size();
if (currIndex < stockCodesSize) {
    listIterator = stockCodes.listIterator(currIndex);
}
stockCodesReaderLock.unlock();
Run Code Online (Sandbox Code Playgroud)

我想知道,我是否应该try/finally阻止,因为我看不出有任何异常出现的机会?如果try/finally必须使用,我应该使用(A)还是(B)

我有什么需要吗?

(一个)

try {
    stockCodesReaderLock.lock();
    final int stockCodesSize = stockCodes.size();
    if (currIndex < stockCodesSize) {
        listIterator = stockCodes.listIterator(currIndex);
    }
} finally {
    stockCodesReaderLock.unlock(); …
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
2
解决办法
5521
查看次数

tryLock 方法调用是否进入 try 块?

ReentrantReadWriteLock.ReadLock
ReentrantReadWriteLock.WriteLock
Run Code Online (Sandbox Code Playgroud)

对于上述两个类,我是否像这样调用锁

try {
     readLock.tryLock(10, TimeUnit.SECONDS)
     [...]
} finally {
     readLock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

或者

readLock.tryLock(10, TimeUnit.SECONDS)
try {

     [...]
} finally {
     readLock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

哪个更安全,同样适用于lock()方法还是tryLock()方法?

java locking

3
推荐指数
1
解决办法
293
查看次数

标签 统计

java ×2

locking ×1