I have the following thread-dump, which shows two threads both locking on the same object. And I'm confused as to what it really means
"pool-1-thread-2" prio=10 tid=0x00007fd6dc106000 nid=0x5d15 in Object.wait() [0x00007fd6d2067000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007c3547770> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at test.TestDead$Foo.second(TestDead.java:22)
at test.TestDead$Foo.first(TestDead.java:14)
- locked <0x00000007c3547770> (a java.lang.Object)
at test.TestDead$2.run(TestDead.java:45)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Locked ownable synchronizers:
- <0x00000007c35519e8> (a java.util.concurrent.ThreadPoolExecutor$Worker)
"pool-1-thread-1" prio=10 tid=0x00007fd6dc104800 nid=0x5d14 in Object.wait() [0x00007fd6d2168000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007c3547770> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at test.TestDead$Foo.second(TestDead.java:22)
at test.TestDead$Foo.first(TestDead.java:14)
- locked <0x00000007c3547770> (a java.lang.Object)
at test.TestDead$1.run(TestDead.java:37)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
atjava.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
atjava.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:724)
Locked ownable synchronizers:
- <0x00000007c3551730> (a java.util.concurrent.ThreadPoolExecutor$Worker)
What does "locked" really mean here?