Hazelcast Trylock和多次通话

时间:2015-07-06 15:09:14

标签: java hazelcast

我遇到了以下问题:

我们有一个多部分进程 P ,有两个步骤( s1 s2 )。 该过程已实现,在 s1 中获取锁定但未释放。在 s2 中再次需要锁定(?),在 s2 完成后,再次释放锁定。

来自documentation

  

锁是可重入的:同一个线程可以在同一个锁上多次锁定。请注意,对于其他线程可以要求此锁定,锁定的所有者必须在所有者称为锁定的情况下多次调用unlock。

如果我理解正确,这意味着,如果我第一次调用 s1 ,则线程池中的线程会获取锁定,例如 Tx 。由于在请求之后未释放锁定,因此线程将返回池中。如果第二个请求进入,则锁定正在使用中(通过 Tx )。但是,如果我在某个时间点启动了足够的请求,我将再次从池中获取 Tx ,并且我能够成功 tryLock 再次使用与之前相同的锁定?

这是对的吗?这意味着,锁定并不是它的生命周期,也不仅限于它,它只能与一个线程绑定。

1 个答案:

答案 0 :(得分:2)

锁具有锁定所有权的概念;这意味着有一个特定的线程拥有一个锁。这也意味着只有这个线程需要释放这个锁。

所以你的thread1获取和thread2释放的用例不能用于锁(无论是hz锁还是普通的j.u.c.l.ReentrantLock)。

您可能希望查看ISemaphore并将其初始化为1,这样您就可以创建二进制信号量。这样您就可以获得“锁定”功能。在1个主题中释放'锁定'在另一个。

但是,它不会处理可重入行为。但是会陷入僵局。