On lines 4 and 5 of the output the jvm is telling me that both the main thread and Thread 8 have the lock over the hash hashtable object?
How can two different threads have the lock on a same syncronized object??? I'm lost here.... Is it because thread 8 (and 9) were started by the Main thread (are child threads of main thread)?
The method Thread.holdsLock(Object) is static. That means it is a method associated with the class Thread that returns whether the current Thread is holding the lock. Unfortunately, java allows accessing static members via concrete instances (this is, however, discouraged by most IDEs and best practice guides). 'mainT.holdsLock(hash)' effectively resolves to 'Thread.holdsLock(hash)' - admittedly this is rather ugly and intuitive.
Joined: Aug 06, 2011
I totally missed that holdsLock() is a static method, so basically holdLock always refers to current Thread executing the add method and not to the main Thread as I was aiming for.
Thanks for the reply!