JUC并发编程 -- 观察线程运行的现象 & 查看进程线程的方法

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JUC并发编程 -- 观察线程运行的现象 & 查看进程线程的方法相关的知识,希望对你有一定的参考价值。

1. 观察线程运行的现象

代码:

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "c.TestMultiThread")
public class TestMultiThread {
    public static void main(String[] args) {
        new Thread(() -> {
            while (true) log.debug("t1 running");
        }, "t1").start();

        new Thread(() -> {
            while (true) log.debug("t2 running");
        }, "t2").start();
    }
}

部分运行结果:

结论:

  • cpu在不断的交替执行这2个线程的代码,线程具体的执行顺序我们是控制不了的

补充:

  • 如果你的cpu只有一个核心,那么请不要这样运行上面的测试代码,这2个线程开启后会一直占用cpu,并且这是一个while ture的循环,会不断的用cpu,那么这是cpu的占用就会达到100%,那么你电脑的其他程序就会暂停。

2. 查看进程线程的方法


2.1 Windows

  • 可以快速使用 ctrl + shift + ese 打开任务管理器

  • 可以鼠标右键,选择任务管理器(在下面的导航栏右键)

  • 在任务管理器的导航栏右键可以选择显示的内容,这里勾选上PID,PID就是线程的ID

也可以使用命令行查看所有的进程:

  • 命令行输入tasklist

小结:

  • 任务管理器可以查看进程和线程数,也可以用来杀死进程
  • tasklist 查看进程
  • taskkill 杀死进程

2.2 Linux

  • ps -fe 查看所有进程
  • ps -fT -p 查看某个进程(PID)的所有线程
  • kill 杀死进程
  • top 按大写 H 切换是否显示线程
  • top -H -p 查看某个进程(PID)的所有线程

2.3 Java

运行这段代码:

import lombok.extern.slf4j.Slf4j;

@Slf4j(topic = "c.TestMultiThread")
public class TestMultiThread {
    public static void main(String[] args) {
        new Thread(() -> {
            while (true) log.debug("t1 running");
        }, "t1").start();

        while (true) log.debug("main running");
    }
}

  • jps 命令查看所有 Java 进程

    可以发现现在这个进程是在运行的。

  • taskkill /F /PID 14712 可以终止刚刚Java线程

  • jstack 查看某个 Java 进程(PID)的所有线程状态

  • jconsole 来查看某个 Java 进程中线程的运行情况(图形界面)



以上是关于JUC并发编程 -- 观察线程运行的现象 & 查看进程线程的方法的主要内容,如果未能解决你的问题,请参考以下文章

JUC并发编程 -- JUC介绍 & 线程/进程 & 并发/并行 & Java代码查看CPU的核数

JUC并发编程 线程运行原理 -- 栈帧 & 栈帧图解

JUC并发编程 多线程设计模式 -- 同步模式之顺序控制( 固定运行顺序 & 交替输出)

JUC并发编程 -- park & unpark 基本使用及原理

JUC并发编程 -- 同步 & 异步的应用

JUC并发编程 -- 回顾多线程(线程的六种状态 & wait / sleep 的区别)