目录
线程有很多状态,除了针对操作系统层面上的就绪和阻塞状态
在Java中, 线程还有自己专属的多种状态.
注意:Java中的状态和操作系统中的PCB中的两种状态没关系.
NEW
把 Thread 对象创建好了, 但是没有调用start
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
});
System.out.println(t.getState());
t.start();
}
TERMINATED
线程的run方法执行完毕
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
});
t.start();
Thread.sleep(1000);//因为不确定是Main线程还是Thread线程执行完,这里让线程等1s就必定是线程执行完
System.out.println(t.getState());
}
RUNNABLE
线程还未执行完,也没有在阻塞状态
public static void main(String[] args) {
Thread t = new Thread(() -> {
//此时线程在无限循环中,随叫随到
while (true){
}
});
t.start();
System.out.println(t.getState());
}
TIMED_WAITING
线程运行了sleep方法或者运行了带参数的join方法,线程进入了阻塞状态
public static void main(String[] args) throws InterruptedException {
Thread t = new Thread(() -> {
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t.start();
Thread.sleep(1000);//不加的话不知道是哪个线程先执行完了
System.out.println(t.getState());
}