查看java进程信息

纸上得来终觉浅,绝知此事要躬行

通过视频学习多线程有段时间了,但是总是当时记住了,过了不久,或许知道原理,但是要让我自己实现一下还是写不出来。
最近准备看看《Java并发编程的艺术》这本书,跟着实践一下,重温知识。

学学查看进程信息

该文章主要是通过多线程的死锁来简单介绍三种查看进程状态的工具,虽然网上有不少介绍了,但是自己还是记录一下。

死锁代码

书上p5的例子,死锁,就是多个线程相互持有对方所需要的锁而不是释放,导致相互等待。

public class DeadLockDemo {
    private static String A = "A";
    private static String B = "B";

    public static void main(String[] args) {
        new DeadLockDemo().deadLock();
    }

    private void deadLock(){
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (A) {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (B) {
                        System.out.println("1");
                    }
                }
            }
        });

        Thread t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (B) {
                    synchronized (A) {
                        System.out.println("1");
                    }
                }
            }
        });

        t1.start();
        t2.start();
    }
}

jps+jstack

jps命令查看系统中所有的java进程及其进程号
首先,运行上一段代码,然后再IDEA的Terminal界面(当然这就是个cmd界面)输入jps,。即可查看当前java进程及其对应的进程号,比入该例子的DeadLockDemo,15956即为其进程id
查看java进程信息_第1张图片
然后再输入jstack + 对应进程号,即可查看该进程下的状态信息,其输出信息有一长串。
在这里插入图片描述
该文章讲的是死锁,再执行jstack 进程号后,再末尾会出现死锁信息,如下
查看java进程信息_第2张图片

jconsole

同样运行java文件,在Terminal中输入jconsole
查看java进程信息_第3张图片
出现可视化界面,选择对应进程进行连接就行
查看java进程信息_第4张图片
然后就出现了对应进程的一些可视化数据
查看java进程信息_第5张图片
检测死锁,点击上方线程,获取线程信息,下方有个检测死锁,
查看java进程信息_第6张图片
然后点击对应线程就可以获取死锁信息了。
查看java进程信息_第7张图片

IDEA插件

因为我使用的是IDEA,不知道eclipse之类的有没有查看java进程信息_第8张图片
装上VisualVM这个插件,就会在右上角运行栏那里出现这两个图标,这两个的作用我感觉就等于左边的运行和Debug加上VisualVM工具而已。比如点击1,就会同时运行程序和VisualVM。

在这里插入图片描述
然后VisualVM界面是这样的,做点这个是选取对应进程,右边就是查看具体状态。
查看java进程信息_第9张图片
然后点击Thread,就会出现,Deadlock detected!就是说检测到了死锁。指引你点击右边的Thread Dump查看具体信息。

查看java进程信息_第10张图片

总结

今天就通过检测死锁的案例来介绍三种查看进程信息的方式,想要深入这三种方式怎么查看其它信息就要自己摸索了。

你可能感兴趣的:(Java,java)