jstack 进程号,打出线程运行情况:
java.lang.Thread.State: BLOCKED (on object monitor)--说明线程阻塞的
BLOCKED 是由于synchronized 锁引起的。
- waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed)
说明阻塞是等待这个锁。
那么谁持有这个锁呢?
"pool-1-thread-8" #18 prio=5 os_prio=0 tid=0x0000000059650800 nid=0x21d4 runnable [0x000000005af5f000]
java.lang.Thread.State: RUNNABLE
at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6)
- locked <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed)
at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
这个线程持有这个锁,并且是运行状态。
"pool-1-thread-16" #26 prio=5 os_prio=0 tid=0x0000000059658800 nid=0x140 waiting for monitor entry [0x000000005bb1f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb3438> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-15" #25 prio=5 os_prio=0 tid=0x0000000059658000 nid=0x22c8 waiting for monitor entry [0x000000005b95e000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb3100> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-14" #24 prio=5 os_prio=0 tid=0x0000000059657000 nid=0x904 waiting for monitor entry [0x000000005b85f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb2e58> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-13" #23 prio=5 os_prio=0 tid=0x0000000059656800 nid=0x1ef4 waiting for monitor entry [0x000000005b59f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb2b20> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-12" #22 prio=5 os_prio=0 tid=0x0000000059655800 nid=0x26ec waiting for monitor entry [0x000000005b6df000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb2878> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-11" #21 prio=5 os_prio=0 tid=0x0000000059655000 nid=0x1568 waiting for monitor entry [0x000000005b45e000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb25d0> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-10" #20 prio=5 os_prio=0 tid=0x0000000059654000 nid=0x18f4 waiting for monitor entry [0x000000005b31f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb2328> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-9" #19 prio=5 os_prio=0 tid=0x0000000059653800 nid=0x1960 waiting for monitor entry [0x000000005b11f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb2080> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-8" #18 prio=5 os_prio=0 tid=0x0000000059650800 nid=0x21d4 runnable [0x000000005af5f000] java.lang.Thread.State: RUNNABLE at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - locked <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb1dd8> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-7" #17 prio=5 os_prio=0 tid=0x0000000059650000 nid=0x154c waiting for monitor entry [0x000000005ab5f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb1ae0> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-6" #16 prio=5 os_prio=0 tid=0x000000005964e000 nid=0x179c waiting for monitor entry [0x0000000059d0f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb1838> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-5" #15 prio=5 os_prio=0 tid=0x000000005964d800 nid=0x2164 waiting for monitor entry [0x000000005ae5f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb1590> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-4" #14 prio=5 os_prio=0 tid=0x000000005964c800 nid=0x105c waiting for monitor entry [0x000000005ac6e000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb12e8> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-3" #13 prio=5 os_prio=0 tid=0x0000000059649800 nid=0x1a54 waiting for monitor entry [0x000000005aa5f000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb1010> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-2" #12 prio=5 os_prio=0 tid=0x0000000059648800 nid=0x1c60 waiting for monitor entry [0x000000005a86e000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - <0x00000000d6cb0d68> (a java.util.concurrent.ThreadPoolExecutor$Worker) "pool-1-thread-1" #11 prio=5 os_prio=0 tid=0x0000000059648000 nid=0x2618 waiting for monitor entry [0x000000005a6bf000] java.lang.Thread.State: BLOCKED (on object monitor) at code.example.base.util.concurrent.lock.speed.SyncSpeed.lockRun(SyncSpeed.java:6) - waiting to lock <0x00000000d6c8e750> (a code.example.base.util.concurrent.lock.speed.SyncSpeed) at code.example.base.util.concurrent.lock.speed.SpeedTest$1.run(SpeedTest.java:32) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748)