代码之家  ›  专栏  ›  技术社区  ›  maxim_ge

在Java线程中锁定对象一段时间

  •  1
  • maxim_ge  · 技术社区  · 15 年前

    我需要实现以下场景

    • ThreadN获得一个锁
    • ThreadX(监视器)发现ThreadN持有锁的时间太长,并释放锁
    • ThreadM获取锁并继续

    ThreadN的命运无关紧要。

    哪些类(来自java.util.concurrent?)我应该用吗?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Michael Borgwardt    15 年前

    我想你可以根据 Semaphore ,但是您必须通过设置获取锁时的时间戳来实现监视功能,定期检查它,如果持有锁时间过长,则中断持有锁的线程。

    LockSupport 班级看起来也有帮助。

        2
  •  0
  •   Peter Knego    15 年前

    恐怕你不能。

    Java中的锁定是协作的——如果一个线程获得了一个对象上的锁,则不能强制它从另一个线程释放锁。

    所有java.util.concurrent类都基于基本的java锁定特性(synchronize/wait/notify)构建,因此它们没有这样的功能。

    或者使用更高级的java.util.concurrent类,比如Lock。