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)
相关推荐
java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图
Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-...
(1)在访问该资源前,首先申请该互斥锁,如果该互斥处于开锁状态,则申请到该锁对象,并立即占有该锁(使该锁处于锁定状态),以防止其它线程访问该资源;如果该互斥锁处于锁定状态,默认阻塞等待; (2)只有锁定...
Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的...
同步代码需要获取对应的锁对象,如果锁对象被其他线程持有,则当前线程就会进入一个block状态,当当前线程持有锁对象时,进入RUNNABLE状态 WAITING(无线等待) 通过一个wait方法线程进入一个无线等待状态,需要另一...
二、线程的分离状态 12 三、线程的继承性 13 四、线程的调度策略 13 五、线程的调度参数 14 六、线程的作用域 16 七、线程堆栈的大小 17 八、线程堆栈的地址 18 九、线程栈末尾的警戒缓冲区大小 18 第三章 Posix有名...
在使用线程时,最麻烦的就是线程的同步控制,如暂停、继续、停止(包括暂停状态下)等。虽然微软提供了 SuspendThread、TerminateThread 等函数“似乎”可以完成这个功能,但如果你在代码里使用这些函数,则往往会...
/** * 读写锁 * 读-读并发,读-写互斥,写-写互斥 * Windows NT下可以使用 * 基于CRITICAL_SECTION实现,简单... * 直接加写锁才是写优先状态,采用尝试写是非写优先的 * @version 1.1 */ 附带有使用的例子……
多线程读写sqlite数据库,同步锁,计时测试读写性能,
lock_guard 对象通常用于管理某个锁(Lock)对象,因此与 Mutex RAII 相关,方便线程对互斥量上锁,即在某个 lock_guard 对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而 lock_guard 的生命周期结束之后,...
线程的概念模型 线程的创建和启动 线程的状态控制 临界资源、对象锁和死锁 线程的互斥和同步
Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 Java线程:线程的调度-让步 Java线程:线程的调度-合并 Java线程:线程的调度-...
读写锁状态: 一把读写锁具备三种状态: 1. 读模式下加锁状态 (读锁) 2. 写模式下加锁状态 (写锁) 3. 不加锁状态 读写锁特性: 1. 读写锁是“写模式加锁”时, 解锁前,所有对该锁加锁的线程都会被阻塞。 2. ...
首先一个线程成功获得一个条件变量后,调用此条件变量的wait()方法会导致这个线程释放这个锁,并进入“blocked”状态,直到另一个线程调用同一个条件变量的notify()方法来唤醒那个进入“blocked”状态的线程。...
java线程 与动画相结合11.1 线程与线程类 11.2 线程的创建 11.3 线程的状态与调度 11.4 线程状态的改变 11.5 资源共享与对象锁 11.6 线程组
多个线程操作共享对象导致的状态不一致问题 原因 共享资源的竞态条件问题 问题 竞态条件 指令重排序 工作内存中主内存同步延迟 解决 要有安全策略文档或注释 不共享 线程封闭 仅在单线程内访问数据 栈...
关于多线程的个人总结,包括概念理解、创建线程、线程同步安全、各类锁、线程状态、并行并发、异步同步等
为了支持多线程Python程序,当前线程在安全访问Python对象之前,必须持有全局锁(GIL,Global Interpreter Lock,全局解释器锁)。如果没有锁,多线程中甚至最简单的操作都会发生问题。例如,两个线程同时增加一个...