演示 NEW-RUNNABLE--Running...--TERMINATED
如上图,打断点,并将断点改成Thread类型。通过debug运行。
流程:debug启动项目,main函数线程执行到24行先不下一步。切换到t1线程,将 t1线程执行结束后,再执行main函数的线程
输入日志:
[DEBUG] 2022-05-24 11:23:34,407 method:com.irving.list.TestThreadState.testRunnableTerminated(TestThreadState.java:23)
state: NEW
[DEBUG] 2022-05-24 11:23:34,413 method:com.irving.list.TestThreadState.testRunnableTerminated(TestThreadState.java:25)
state: RUNNABLE
[DEBUG] 2022-05-24 11:23:39,425 method:com.irving.list.TestThreadState.lambda$testRunnableTerminated$0(TestThreadState.java:19)
Running...
[DEBUG] 2022-05-24 11:23:54,079 method:com.irving.list.TestThreadState.testRunnableTerminated(TestThreadState.java:28)
state: TERMINATED
Disconnected from the target VM, address: '127.0.0.1:54388', transport: 'socket'
package com.irving.list;
import lombok.extern.slf4j.Slf4j;
/**
* @author zdq
* @version 1.0
* @date 2022/5/24 11:08
* @describe
*/
@Slf4j
public class TestThreadState {
public static void main(String[] args) {
testRunnableTerminated();
}
public static void testRunnableTerminated(){
Thread t1 = new Thread(() -> {
log.debug("Running..."); // Running...
}, "t1"
);
log.debug("state: {}",t1.getState()); // 1 NEW 状态
t1.start();
log.debug("state: {}",t1.getState()); // 2 RUNNABLE 状态
log.debug("state: {}",t1.getState()); // 4 TERMINATED 状态
}
}
BLOCKED演示
private static void testBlocked(){
Thread t2 = new Thread(() -> {
log.debug("30-before sync"); // 3
synchronized (LOCK){
log.debug("32-in sync"); //4
}
}, "t2");
t2.start();
log.debug("36-stste:{}",t2.getState()); //1
synchronized (LOCK){
log.debug("39-stste:{}",t2.getState()); // 2
}
log.debug("41-stste:{}",t2.getState()); // 5
}
[DEBUG] 2022-05-24 14:42:56,132 method:com.irving.list.TestThreadState.testBlocked(TestThreadState.java:37)
36-stste:RUNNABLE
[DEBUG] 2022-05-24 14:43:20,104 method:com.irving.list.TestThreadState.lambda$testBlocked$1(TestThreadState.java:31)
30-before sync
[DEBUG] 2022-05-24 14:43:36,100 method:com.irving.list.TestThreadState.testBlocked(TestThreadState.java:40)
39-stste:BLOCKED
[DEBUG] 2022-05-24 14:43:42,945 method:com.irving.list.TestThreadState.lambda$testBlocked$1(TestThreadState.java:33)
32-in sync
[DEBUG] 2022-05-24 14:43:51,733 method:com.irving.list.TestThreadState.testBlocked(TestThreadState.java:42)
41-stste:TERMINATED
waiting演示图
private static void test(){
Thread t2 = new Thread(() -> {
synchronized (LOCK) {
log.debug("before waiting");
try {
LOCK.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "t2");
t2.start();
log.debug("state:{}",t2.getState());
synchronized (LOCK){
log.debug("state:{}",t2.getState());
LOCK.notify();
log.debug("state:{}",t2.getState());
}
log.debug("state:{}",t2.getState());
}
上面方法,都是根据传智播客老师的b站课程,讲解得来。利用idea的debug断点操作