一个拒绝相同线程可重入但允许不同线程重入的锁

时间:2015-11-11 13:11:15

标签: java concurrency java.util.concurrent

是否存在满足以下规则的锁或其他同步原语:

  • 锁具有无限许可,
  • 任何单个线程最多只能获得一个许可,
  • 不持有许可证的主管可以立即获得许可证,
  • 当一个线程被拒绝许可证(它已经拥有一个)时,它应该返回boolean而不是阻止(duh)。

我知道我可以使用AbstractQueuedSynchronizer自己构建这个,但我从来没有玩过这个,目前我只需要一个开箱即用的无问题解决方案。 (我很好奇,如果它存在)

还有一件事:

  • 除了添加一个或两个额外的类
  • 之外,不允许使用任何库

1 个答案:

答案 0 :(得分:8)

您所描述的不是任何类型的同步工具,恰恰相反:防止线程之间的任何干扰。您的工具具有单线程语义,必须对使用它的线程数不变。

因此,正如评论中所建议的那样,ThreadLocal<Boolean>似乎是完美的匹配。