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

Mar*_*mus 3 java concurrency java.util.concurrent

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

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

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

还有一件事:

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

Mar*_*nik 8

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

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