线程运行状态
线程的状态:
说明:
NEW(新建状态):new出一个线程,还没有start的时候
Teminated(结束状态):线程结束
Runnable(运行状态):Runnable里面有两种状态,以下两种。调用start的时候,交给线程调度器执行,也就是交给操作系统。
Ready(就绪状态):就绪状态也就是当前线程存在CPU的等待队列里面
Running(运行状态):线程到了Running状态才算是真正的运行状态。
TimeWaiting(等待状态):按照时间等待,
waiting(等待状态):等待状态,运行完之后回去Runable
Blocked(阻塞状态):同步代码块没有获得锁就会阻塞,获得锁就是就绪状态。
出现的问题:
哪些是JVM管理的,哪些是操作系统管理的?
上面这些状态全是由JVM管理的,因为JVM管理的时候也要通过操作系统,所以呢,那个操作系统和那个JVM是分不开的,JVM是跑在操作系统上的一个层序、
线程什么状态被挂起,挂起是否也是一个状态?
Running的时候,在一个CPU上会跑很多个线程,从Running状态被扔回其他状态就叫做线程挂起,CPU控制这个过程。
package juc_1;/*
*@author wupeng
*@time 2021/7/14-10:51
*/
public class ThreadfState {
static class MyThread extends Thread {
@Override
public void run() {
System.out.println(this.getState());
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(500);
if(i == 5) {
System.out.println(this.getState());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
}
}
}
public static void main(String[] args) {
Thread t = new MyThread();
//获取线程的状态
System.out.println(t.getState());
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//然后join之后,结束了一个是Timenated
System.out.println(t.getState());
}
}