网站制作模板免费下载,拖拽式建站,网站功能定位分析,西安做网站科技有限公司我们可以通过下面的这段代码来查看线程一共有哪几种状态
//线程的状态是一个枚举类型 Thread.State
for(Thread.State state : Thread.State.values()){System.out.println(state);
}NEW#xff08;新建状态#xff09;#xff1a; 当线程对象已经被创建#xff0c;但是 s…我们可以通过下面的这段代码来查看线程一共有哪几种状态
//线程的状态是一个枚举类型 Thread.State
for(Thread.State state : Thread.State.values()){System.out.println(state);
}NEW新建状态 当线程对象已经被创建但是 start() 方法还没有被调用。 RUNNABLE就绪状态当线程已经调用了 start() 方法线程已经在cpu上运行或等待运行。 TERMINATED终止状态说明当前线程已经工作结束Thread 对象还在但是内核上的线程已经销毁了。 TIMED_WAITING有时限等待状态与 WAITING 类似但有一个超时时间限制通常是由于调用了 sleep() wait(timeout) join(timeout) 等固定时间产生的阻塞。 WAITING等待状态当线程等待某个特定条件的发生通常是由于调用了 wait()、join()或 park()等方法时线程处于等待状态。 BLOCKED阻塞状态由锁竞争导致的阻塞。 我们来看下面的代码
public class demo {public static void main(String[] args) throws InterruptedException {Thread t new Thread(()-{for (int i 0; i 10; i) {try {//此时t线程在sleep中获取的状态 可能是RUNNABLE 也可能是 TIMED_WAITINGThread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}});System.out.println(t线程调用前状态:t.getState());//启动t线程t.start();//循环获取状态 总会把这两种状态都获取到 具体获取到哪个状态取决于系统调度for (int i 0; i 20; i) {System.out.println(线程执行中状态:t.getState());}//让主线程等待t线程执行完t.join();//获取t线程结束后的状态System.out.println(t线程结束后:t.getState());}
}在创建一个线程还没有start()的时候 它的状态就是 NEW 调用start() 后也就是意味着线程进入就绪状态 也就是 RUNNABLE等待系统调度。当执行任务时,遇到了 sleep() 这个时候线程不会被分配cpu资源此时线程的状态是 TIMED_WAITING 当线程的任务执行完毕时也就是run() 方法结束,此时线程状态是 TERMINATED。