- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下代码。为了防止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();
我在想,我是否应该拥有 try/finally
阻止,因为我看不到任何出现异常的机会?如果使用 try/finally
是必须的,我应该使用 (A) 还是 (B)?
需要我吗?
(A)
try {
stockCodesReaderLock.lock();
final int stockCodesSize = stockCodes.size();
if (currIndex < stockCodesSize) {
listIterator = stockCodes.listIterator(currIndex);
}
} finally {
stockCodesReaderLock.unlock();
}
(B)
stockCodesReaderLock.lock();
try {
final int stockCodesSize = stockCodes.size();
if (currIndex < stockCodesSize) {
listIterator = stockCodes.listIterator(currIndex);
}
} finally {
stockCodesReaderLock.unlock();
}
最佳答案
其他受访者是对的:您应该始终使用 try/finally。
关于(A)或(B)是否正确,Sun在JavaDoc of ReentrantReadWriteLock中似乎推荐(B) (搜索“finally”即可看到)。我想这是因为 lock()
方法如果失败可能会抛出异常:例如,JavaDoc 说它会在相同的模糊情况下抛出 Error
线程尝试递归获取锁超过 65535 次。
关于java - 我们如何将 try finally 用于 Lock.lock 和 Lock.unlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664717/
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我试图理解不允许“解锁一个未锁定的互斥体”将导致不可预测的行为 w.r.t Linux 内核互斥体,当我查看代码时我没有看到任何与此相关的影响。 具体来说: /** * try to promote
我在 Go 中有一个 cli 应用程序(仍在开发中),源代码中没有任何更改,也没有对依赖项进行任何更改,但突然间它开始 panic panic: sync: unlock of unlocked mu
我正在使用ThreadSanitizer进行线程分析,并且收到一条警告,该警告使我对互斥锁的工作方式的理解非常困惑。我在Debian Stretch上使用gcc 6.3。 在一个类中,在一个线程中,我
在下面的代码片段中,我不确定是否在 InterruptedException 之后将 locked 设置为 false: private static Lock lock = new Reentran
我一直在尝试确定此函数的作用,但我似乎无法在 CComModule 类的 MSDN 文档中的任何地方找到它。 谁能告诉我它是干什么用的? 最佳答案 此函数用于 DllCanUnloadNow()才能正
我在Windows上安装Jenkins 2,安装后打开一个页面,URL为: http://localhost:8080/login?from=%2F 页面的内容是这样的: 问题: 如何“解锁 Jenk
我正在编写一个必须以两种方式修改列表的程序。尽管此实现完美运行,但它未能让第二个线程获取锁: Node head = new Node(new Object(), null); public stat
在这个示例代码中 http://botan.randombit.net/manual/fpe.html 我试图在 Visual C++ 托管包装器中使用一种方法,但我一直在“解锁”时遇到编译错误这是什
我注意到,当我有一个可以大量锁定和解锁线程的算法时,我的性能会受到相当大的影响。 有什么办法可以帮助减少开销吗?使用信号量会提高/降低效率吗? 谢谢 typedef struct _treenode{
我已经在Java应用程序中创建了单例redisson实例,用于与Redis服务器进行通信。 现在,使用此重做实例,我将获得一个锁,该锁在完成某些任务后将释放。但是在调用unlock方法之后,我仍然看到
我有两个触发器的任务。第一个从任何用户的登录开始 并无限期地每3分钟运行一次。 当“在工作站上解锁”时,第二个开始。我也要运行这个 每隔10分钟触发第二次触发,并在触发后无限期触发。我有 以下与“在工
如何在 UILabel 上制作类似于“滑动解锁”文本的动画? (文本渐变为左->右动画)然后文本颜色适应背景。 最佳答案 我认为实现这个效果的关键是CALayer mask .您可以将第二个 CALa
我们在 ReentrantLock 上调用“lock()”,线程显然不应该被卡在那里。 在调用“lock()”之前使用断点进行调试时,第一个线程将在那里停止,程序指针将指向“Thread.exit()
我正在尝试使用以下代码锁定线程: Lock lock = readLock ? getLock(key).readLock() : getLock(key).writeLock(); try {
我已经能够使用来自另一个堆栈溢出问题 (iPhone "slide to unlock" animation) 的代码来制作一些“滑动解锁”样式的文本脉冲。此刻,面具从左向右移动。我想反转它,让它不再
我正在尝试解决 thread-ring问题。在每个线程中,我读取 token 值 如果不是我的,则检查是否是程序结束 如果是则结束线程 否则,再次阅读并重复 如果它是我的(即有我的 id)然后获取写锁
我对 IOS 中的 UISliders 有疑问,您可以在多大程度上自定义它们? 我想在 iPhone 中实现类似“Unlock slider”的 slider 。 但似乎 IOS 没有提供任何“标准”
我想创建一个 jquery 脚本,其工作方式类似于 iPhone 的“滑动解锁”栏。我想要 2 个 div、容器和 slider 。我希望能够将 slider 拖动到右侧,当 slider 到达容器的
可能是一个基本问题? 1) 为什么互斥量应该在同一个线程上解锁?。我们有什么具体原因吗?2) 如果我理解正确的话,为什么要保留 pthraed_mutex_lock 而 sem_wait/sem_po
我是一名优秀的程序员,十分优秀!