java线程的六大状态
NEW 刚创建时,还未调用start方法时的状态
RUNNABLE 线程正在执行时
BLOCKED 阻塞时,此时线程处于等待占用cpu中,通常是失去时间片或者等待锁的释放
WAITING 等待中,调用wait()方法时线程处于WAITING状态
TIMED_WAITING 含有时间的等待,如调用wait(1000),sleep(1000)时,线程的状态就会处于TIMED_WAITING
TERMINATED 线程执行结束后的状态
package com.dyma.threadtest;
import lombok.extern.slf4j.Slf4j;
@Slf4j(topic = "c.state")
public class StateTest {
private final static Object lock = new Object();
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
Thread current = Thread.currentThread();
log.debug("2:[{}]",current.getState());//运行状态
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock){}
synchronized (current){
try {
current.wait();
current.wait(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"test");
log.debug("1:[{}]",t1.getState());//新建状态
t1.start();
synchronized (lock){
Thread.sleep(500);
log.debug("3:[{}]",t1.getState());//等待锁的释放,阻塞状态
}
Thread.sleep(500);
log.debug("4:[{}]",t1.getState());//等待状态
synchronized (t1){
t1.notify();
}
Thread.sleep(500);
log.debug("5:[{}]",t1.getState());//超时等待
Thread.sleep(1000);
log.debug("6:[{}]",t1.getState());//运行结束状态
}
}
输出结果为