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)
相关推荐
在计算机编程领域,尤其是涉及到实时系统和并发编程时,线程锁和线程安全变量是至关重要的概念。LabWindows/CVI是一种流行的交互式C开发环境,特别适合于开发科学和工程应用。本实例将深入探讨如何在LabWindows/CVI...
线程锁,又称为同步机制,是为了在多线程环境下保证数据的一致性和完整性而引入的,避免了多个线程同时访问共享资源可能导致的数据不一致问题。下面我们将深入探讨线程和线程锁的概念以及它们在实际应用中的使用。 ...
- **阻塞状态(Blocked)**:线程试图获取一个被其他线程占用的锁而进入的状态,直到线程获取到锁才会继续运行。 - **睡眠状态(Sleeping)**:通过调用`Thread.sleep()`方法使线程暂时停止运行,到达指定的时间后线程...
本文将详细介绍 Java 线程状态转换图,包括初始状态、可运行状态、运行状态、阻塞状态、锁池状态、等待队列状态和终止状态七种状态的定义、特点和转换关系。 初始状态(Newborn) * 线程的实现有两种方式,一是...
线程锁的状态流转流程图
本主题将深入探讨多线程的使用以及线程锁的两种主要实现方式: synchronized关键字和ReentrantLock。 一、多线程基础 1. 线程创建: - 继承Thread类:创建一个新的类,该类继承自Thread类,并重写run()方法。然后...
每种状态之间的转换都有特定的原因和触发条件,如从运行状态变为阻塞状态可能是因为等待输入输出操作完成,或者因为尝试获取一个已经被其他线程锁定的对象锁而被阻塞。理解这些状态及其转换对于有效管理和控制线程至...
在命令行中运行`jstack <pid>`(pid是Java进程的ID),即可查看该进程的线程状态。 总结来说,Java提供了多种方式来查看JVM中的线程活动状况,无论是通过编程还是使用命令行工具,都能帮助开发者诊断和优化多线程...
了解如何查看线程的运行状态对于调试和性能优化至关重要。本文将深入探讨Java源码中查看线程状态的方法,并通过一个经典的实例来阐述这一过程。 线程在Java中由`java.lang.Thread`类表示,其生命周期包括以下几种...
如果不满足,它会释放锁,并调用pthread_cond_wait()进入等待状态。 2. 信号通知:线程B在改变条件后,获取互斥锁,然后调用pthread_cond_signal()或pthread_cond_broadcast()唤醒一个或所有等待线程。注意,发送...
java线程从新建到死亡所能经历的各种状态之间的流转。包括运行到阻塞、进入锁池、等待队列,全面而清晰的一张图
可能导致线程持有的锁无法释放,从而引发死锁。 - 不建议使用,因为可能会导致资源泄漏或死锁。 2. **`void interrupt()`**: - 用于中断正在运行的线程。 - 调用此方法后,如果线程正处于阻塞状态(例如执行`...
当线程在等待某个特定条件满足时,它可以释放互斥锁并进入等待状态,直到被其他线程唤醒。这样可以避免线程无谓地等待,提高系统效率。条件变量的操作包括`pthread_cond_init`(初始化)、`pthread_cond_wait`(等待...
在Java多线程编程中,线程锁是一种重要的机制,用于解决多个线程同时访问共享数据时可能出现的数据不同步问题。线程锁主要通过`synchronized`关键字实现,它可以作用于方法或者代码块,确保同一时间只有一个线程能够...
线程锁则是确保多线程环境下数据安全和正确性的重要工具。本篇将深入探讨iOS中常见的几种线程锁及其使用示例。 1. **NSLock** NSLock是Foundation框架提供的一种轻量级线程锁,它通过调用`lock`和`unlock`方法来...
2. **线程状态** - 新建(New):线程被创建但未启动。 - 可运行(Runnable):线程已启动,等待CPU分配时间片。 - 运行(Running):线程获得CPU时间片正在执行。 - 阻塞(Blocked):线程被阻塞,如等待锁或...
NEW表示线程刚创建还未启动,RUNNABLE表示线程在执行或等待CPU资源,BLOCKED表示线程被阻塞等待监视器锁,WAITING表示线程处于无限制等待状态,TIMED_WAITING是有限等待状态,而TERMINATED表示线程已经执行完毕。...
例如,如果一个线程长时间处于阻塞状态,可能是因为它在等待一个永远不会释放的锁。 6. **最佳实践** - 使用线程池来管理线程,以避免大量线程创建和销毁带来的开销。 - 使用同步机制(如Java的`synchronized`...
线程局部变量则为每个线程提供独立的变量副本,避免了共享状态带来的问题。 总结来说,本资源包提供的"多线程入门资料"涵盖了多线程的基本概念、实现方式、线程同步与通信、并发问题及其解决方案,以及分布式锁的...
线程查看器是一款强大的工具,专门用于监控和分析操作系统中的线程状态,这对于开发者和系统管理员来说是极其宝贵的资源。线程是操作系统中并行执行任务的基本单元,它允许一个程序内部的不同部分同时运行,提高了...