在Java中,如何测试对象的监视器是否被锁定?

在Java中,如何测试对象的监视器是否被锁定? 换句话说,给定一个对象obj,是否有任何线程拥有obj的监视器?

我不关心哪个线程拥有显示器。 我需要测试的是,任何线程是否拥有给定对象的监视器。 由于当前线程以外的线程可能拥有监视器,因此Thread.holdsLock(obj)是不够的,因为它只检查当前线程。

我试图找到最简单的解决方案。

这不重复,因为:

  1. 我不能使用更高级别/更新的并发/锁定机制。 我不能使用Lock等。我必须使用低级/旧/传统货币/锁定机制,如synchronized,wait()等。
  2. 当监视器已解锁时,我并不是想找时间执行代码。 我试图在监视器被锁定时执行代码。

实际上,为了给出一点背景知识,我尝试启动的unit testing的这一部分运行两个线程,它们都需要锁定同一个对象。

因此,为了测试正确的并发处理。 我需要1.创建两个线程。 2.启动线程1. 3.一旦线程1拥有监视器,就挂起线程1. 4.启动线程2. 5.一旦线程2被线程1阻塞,挂起线程2. 6.恢复线程1。 7.加入线程1. 8.运行一些断言。 9.恢复线程2. 10.加入线程2. 11.运行一些断言。

我想弄清楚的是做#3的最佳方法,主要是确定线程1何时拥有监视器。