gpt4 book ai didi

java - Hazelcast Trylock 和多次通话

转载 作者:行者123 更新时间:2023-11-30 08:49:53 26 4
gpt4 key购买 nike

我遇到了以下问题:

我们有一个包含两个步骤(s1s2)的多部分流程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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com