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并发编程 多线程设计模式 -- 同步模式之顺序控制( 固定运行顺序 & 交替输出)