- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下问题:
我们有一个包含两个步骤(s1 和s2)的多部分流程P。该过程已实现,在 s1 中获取了一个锁 - 但未释放。在 s2 中再次需要锁(?)并且在 s2 完成后,再次释放锁。
来自documentation :
Locks are re-entrant: the same thread can lock multiple times on the same lock. Note that for other threads to be able to require this lock, the owner of the lock must call unlock as many times as the owner called lock.
如果我理解正确,这意味着,如果我第一次调用 s1,锁将由线程池中的线程获取,比如 Tx。由于请求后锁没有释放,线程回到池中。如果有第二个请求进入,则锁正在使用中(通过 Tx)。但是如果我启动足够多的请求,在某个时间点,我会再次从池中获取Tx,并且我能够再次成功tryLock 与之前相同的锁?
这样对吗?这意味着,锁在其生命周期内不是独占的,或者仅在独占的情况下,它被独占绑定(bind)到一个线程。
最佳答案
锁有锁所有权的概念;这意味着有一个特定的线程拥有一个锁。这也意味着只有这个线程需要释放这个锁。
因此,线程 1 获取和线程 2 释放的用例将无法使用锁(无论是 hz 锁还是常规的 j.u.c.l.ReentrantLock)。
您可能想查看 ISemaphore 并将其初始化为 1,这样您就可以创建二进制信号量。这将允许您在 1 个线程中获取“锁”并在另一个线程中释放“锁”。
但是,它不会处理重入行为。但是反而会死锁。
关于java - Hazelcast Trylock 和多次通话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249352/
以下代码已被 Fortify 标记为违规(锁的“未释放资源”) try { if (lock.tryLock(1, TimeUnit.SECONDS)) { try { //d
我正在实现 ShareKit,到目前为止在 iOS5.1 和 6.0 上运行良好,但是 5.0 在模拟器中给我带来了一些问题。 每当我执行操作表并离开程序(例如在浏览器中启动 Facebook)时,我
我想知道是否有人可以帮助我。我是并发编程的新手,我有以下代码,有时会给我一个 IllegalMonitorStateException 作为当前不拥有锁的线程正在尝试解锁。 我在 OTN 论坛上被告知
我遇到了以下问题: 我们有一个包含两个步骤(s1 和s2)的多部分流程P。该过程已实现,在 s1 中获取了一个锁 - 但未释放。在 s2 中再次需要锁(?)并且在 s2 完成后,再次释放锁。 来自do
tryLock方法的文档说它是一个非阻塞方法 这允许您获得/获取锁(如果在调用该方法时可能的话)。 但我想知道:如何才能在获得锁的同时保证 你的方法 (tryLock) 是非阻塞的?!获得锁意味着你是
我尝试了使用同步、lock.lock()和lock.tryLock()的线程竞赛程序,我发现使用同步和lock.lock()工作得很好,但lock.tryLock()本身不是线程安全的。此方法无法获取
这是关于可重入锁中的 tryLock() 方法。我正在运行下面的示例代码。我知道这段代码会陷入死锁。 import java.util.concurrent.locks.ReentrantLock;
我有一个线程服务器,可以添加/附加/读取文件并将数据中继到客户端。 如果正在添加一个文件,则没有其他线程可以追加/读取它。如果正在追加文件,则没有线程可以追加/读取它。如果正在读取文件,则没有其他线程
在 API docs方法tryLock()的Lock接口(interface),粘贴此代码示例, A typical usage idiom for this method would be: L
我想我只是没有看到一些东西,因为我过去已经让它工作了。 我的锁没有持有独占锁,当创建对象的新实例时,tryLock 返回 true 并安排另一个 TimerTask。 public class A {
我有两个进程可能同时访问同一个文件,想实现文件锁定。问题似乎是一个进程是用 java 编写的,另一个是用 C 编写的,并且不清楚在 java 端如何实现低级锁定。该平台是 Solaris 10。我试图
我正在使用 D3DImage 作为我的 WPF 用户控件的一部分。极少数情况下,在渲染时,D3DImage.TryLock 会失败。 到目前为止,我还没有找到任何关于 D3D.TryLock 为什么会
快速背景: app是一个音频播放器,ffmpeg编译为native共享对象用于解码,单独的native library编译为共享对象用于音频处理,AudioTrack用于输出处理后的音频。所有音频功能
在 Qt 文档中关于 QMutex据说: (...) When you call lock() in a thread, other threads that try to call lock() i
当我在前任所有者死后尝试使用“trylock”锁定互斥锁时,我发现了意外行为 无需解锁。 第一个使用 'trylock' 的进程按预期获得 EOWNERDEAD 状态,因此使用 'unlock' 函数
我编写了一个小方法,用于告诉我应用程序的另一个实例是否已在运行。我知道有很多方法可以查明另一个实例是否正在运行,但我选择了这个。我正在创建一个空文件并在应用程序实例期间保持锁定状态。如果另一个实例正在
对 trylock 的不当使用 T1 T2 x = 42; while (
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Problem with Java file locking mechanism (FileLock etc) 在下
如果我手动打开 .txt 文件,然后执行代码来检查文件是否打开。总是说文件未打开。但相同的代码对于任何 MS Office(.doc、.xls、.ppt)都可以按预期工作。 这是代码片段:
ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock 对于上面的两个类,我是这样调用锁的吗 try { readL
我是一名优秀的程序员,十分优秀!