If you are on JDk 1.6 then ManagementFactory.getThreadMXBean()
is the best way to find out about all the threads waiting on object
For JDK before 1.6 you can use thread group to find out all the threads and then inspect thread stack to find out about object on which they are waiting.