public class ThreadState {
public static void main(String[] args) {
new Thread(new TimeWaiting(),"timeWaitingThread").start();
new Thread(new Waiting(),"WaitingThread").start();
new Thread(new Blocked(),"BlockedThread-1").start();
new Thread(new Blocked(),"BlockedThread-2").start();
}
}
class TimeWaiting implements Runnable{
@Override
public void run() {
while(true){
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Waiting implements Runnable{
@Override
public void run() {
while(true){
synchronized(Waiting.class){
try {
Waiting.class.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
class Blocked implements Runnable{
@Override
public void run() {
while(true){
synchronized(Blocked.class){
while(true){
try {
Thread.sleep(100000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
cd C:\Program Files\Java\jdk1.7.0_51\bin
jps
jstack
ehanmqi@CN00202245 /C/Program Files/Java/jdk1.7.0_51/bin
$ jps
6904
4880 Jps
7928 ThreadState
ehanmqi@CN00202245 /C/Program Files/Java/jdk1.7.0_51/bin
$ jstack 7928
2016-01-06 09:13:27
Full thread dump Java HotSpot(TM) 64-Bit Server VM (24.51-b03 mixed mode):
"DestroyJavaVM" prio=6 tid=0x000000000278e000 nid=0x1cb8 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"BlockedThread-2" prio=6 tid=0x000000000c9af000 nid=0xf50 waiting for monitor entry [0x000000000ce9f000]
java.lang.Thread.State: BLOCKED (on object monitor)
at Blocked.run(ThreadState.java:61)
- waiting to lock <0x00000007d5d9fd18> (a java.lang.Class for Blocked)
at java.lang.Thread.run(Thread.java:744)
"BlockedThread-1" prio=6 tid=0x000000000c9aa800 nid=0x1cc8 waiting on condition [0x000000000d4ee000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at Blocked.run(ThreadState.java:61)
- locked <0x00000007d5d9fd18> (a java.lang.Class for Blocked)
at java.lang.Thread.run(Thread.java:744)
"WaitingThread" prio=6 tid=0x000000000c9a9800 nid=0xf18 in Object.wait() [0x000000000d24f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5d9ec10> (a java.lang.Class for Waiting)
at java.lang.Object.wait(Object.java:503)
at Waiting.run(ThreadState.java:41)
- locked <0x00000007d5d9ec10> (a java.lang.Class for Waiting)
at java.lang.Thread.run(Thread.java:744)
"timeWaitingThread" prio=6 tid=0x000000000c9a9000 nid=0x1f88 waiting on condition [0x000000000d3be000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at TimeWaiting.run(ThreadState.java:23)
at java.lang.Thread.run(Thread.java:744)
"Service Thread" daemon prio=6 tid=0x000000000af9a800 nid=0x1f90 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" daemon prio=10 tid=0x000000000af99800 nid=0x540 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" daemon prio=10 tid=0x000000000af95000 nid=0x424 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x000000000af3f800 nid=0x1f74 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x000000000af92800 nid=0x14d0 runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x000000000af29800 nid=0x1818 in Object.wait() [0x000000000c2ef000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5d05568> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
- locked <0x00000007d5d05568> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:189)
"Reference Handler" daemon prio=10 tid=0x000000000af1e800 nid=0x2b4 in Object.wait() [0x000000000c19f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000007d5d050f0> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:503)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
- locked <0x00000007d5d050f0> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x000000000af1b000 nid=0x1b18 runnable
"GC task thread#0 (ParallelGC)" prio=6 tid=0x00000000027dc800 nid=0x948 runnable
"GC task thread#1 (ParallelGC)" prio=6 tid=0x00000000027de000 nid=0x1e5c runnable
"GC task thread#2 (ParallelGC)" prio=6 tid=0x00000000027e0000 nid=0x1a78 runnable
"GC task thread#3 (ParallelGC)" prio=6 tid=0x00000000027e1800 nid=0x1b2c runnable
"VM Periodic Task Thread" prio=10 tid=0x000000000af9b000 nid=0x1cc0 waiting on condition
JNI global references: 105
相关推荐
6. 如果需要列出进程中的线程,可以使用`ProcessBuilder`类来执行命令行工具(如`jstack`),获取并解析输出以展示线程详情。 通过这个实验,学生不仅能够理解操作系统层面的进程和线程概念,还能掌握Java中对这些...
1. **使用jstack获取线程堆栈信息**: 在JDK的bin目录下执行`jstack 主进程PID> | grep <线程ID十六进制形式> -A 30`,这将帮助我们查看高占用线程的详细堆栈信息。 2. **分析结果**: 通过对高占用线程的堆栈信息进行...
- **堆dump分析**:使用jmap生成堆转储文件,然后使用VisualVM、MAT等工具分析内存占用。 - **日志监控**:通过JMX或JFR收集JVM运行时数据,监控GC、线程、内存等状态。 - **性能监控**:使用JConsole、VisualVM...
文档提到了使用JDK自带的工具(如jstat、jstack和jmap)来分析卡死、性能和内存问题。这些工具可以帮助开发者定位应用程序中的性能瓶颈和错误。 五、解决方案构建与推荐流程 1. FusionInsight资料体系 教材强调了...
1. **增强型开关(Switch Expressions)**:在Java 14引入的实验性特性基础上,Java 16进一步完善了Switch表达式,使其更加灵活且易于阅读。开发者可以使用`yield`关键字返回值,并在多行模式下使用`->`操作符。 2....
例如,使用`javac`编译源代码,使用`java`执行字节码,还可以使用`javadoc`生成文档,`jmap`和`jstack`进行内存管理和线程分析。 六、总结 OpenJDK 11.0.2为开发者提供了稳定且高效的Java开发环境。了解并掌握其...
- **jstack**:查看Java线程堆栈信息。 - **jmap**:内存映射工具,用于诊断内存泄漏等问题。 ### 5. 常见配置问题及解决方案 - **找不到或加载主类错误**:检查类路径(CLASSPATH)是否正确设置,或者类文件路径...
- `jshell`:Java读-评价-打印-循环(REPL)工具,用于快速实验和学习Java语法。 - `javap`:反汇编器,显示关于类文件的公共信息,包括字节码。 - `jmap`:用于生成堆转储、堆概览或线程堆栈的映射。 - `jinfo`:...
7. **jmap**、**jhat**、**jinfo**、**jstack**等:诊断工具,帮助开发者分析和调试JVM内存、配置以及线程状态。 在Linux环境下安装JDK 17的步骤如下: 1. 首先,解压下载的压缩包:`tar -zxvf jdk-17-linux-aarch...
在测试过程中,使用`javadoc`生成文档,`jstack`和`jmap`进行性能分析和故障排查,都是Java开发中的常用工具。 总结来说,`openjdk-19-ea+4_windows-x64_bin.zip`提供了Java 19的早期访问版本,包含一系列新特性,...
这是一个实验,看看我是否可以构建一个仅使用 Linux 内核和 Docker 二进制文件启动的系统,而没有其他任何东西。 目前我有一个运行的概念证明,这似乎表明这是可行的。 您可能认为这是很棒的或有史以来最糟糕的想法...
安装JDK 11.0.5后,开发者可以使用其提供的`javac`编译器将源代码编译为字节码,使用`java`命令执行已编译的程序,还可以利用`jar`工具打包和管理Java应用程序。此外,JDK还包含了如`javadoc`用于生成API文档,`jmap...
4. **死锁检测与恢复**:Java提供了一种死锁检测机制,通过`jstack`命令可以查看线程的堆栈信息,找出可能导致死锁的线程。 5. **死锁预防**:在程序设计阶段避免可能出现死锁的场景,比如避免循环等待。 6. **死锁...
例如,JDK 13引入了一些实验性的特性,如开关表达式(Switch Expressions)、文本块(Text Blocks)等,这些新特性旨在提升代码的可读性和简洁性。同时,JDK 13.0.2可能还修复了一些已知的安全漏洞和稳定性问题,...
4. **JDK工具**:OpenJDK附带了一系列的开发和诊断工具,如javadoc用于生成API文档,jconsole用于监控JVM性能,jmap用于内存分析,jstack用于查看线程堆栈信息等。 5. **模块系统**:Java 9引入了模块系统(Project...
│ 高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析...
│ 高并发编程第一阶段19讲、结合jconsole,jstack以及汇编指令认识synchronized关键字.mp4 │ 高并发编程第一阶段20讲、同步代码块以及同步方法之间的区别和关系.mp4 │ 高并发编程第一阶段21讲、通过实验分析...