下文笔者讲述Java中获取线程状态的方法分享,如下所示:
java线程状态的简介
Java中的线程整个生命周期中分为5种状态:1.新建状态(New):新建的线程都为此状态2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法该状态的线程在"可运行线程池"中,是可运行,一旦获得CPU权限,则立即运行 3.运行状态(Running):已经取得CPU权限,并执行代码4.阻塞状态(Blocked):因某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态阻塞的情况分三种:4.1 等待阻塞:运行的线程执行wait()方法,JVM会把该线程放入等待池中。4.2 同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。4.3 其他阻塞:运行的线程执行sleep()或join()方法,或发出了I/O请求时,JVM会把该线程置为阻塞状态当sleep()状态超时、join()等待线程终止或者超时或I/O处理完毕时,线程重新转入就绪状态5.死亡状态(Dead):线程执行完了或因异常退出了run()方法,该线程结束生命周期
获取线程状态的示例分享
package com.java265.other;
public class Test16 {public static void main(String[] args) throws Exception {MyThread2 a = new MyThread2();a.setName("我是java265.com定义的线程!");printThreadInfo(a);a.start();Thread.sleep(50);printThreadInfo(a);a.waiting = false;Thread.sleep(50);printThreadInfo(a);a.notice();Thread.sleep(50);printThreadInfo(a);while (a.isAlive())System.out.println("alive");printThreadInfo(a);}static void printThreadInfo(Thread t) {System.out.println(t.getName() + " 存活:" + t.isAlive() + " 状态:" + t.getState());}
}class MyThread2 extends Thread {boolean waiting = true;boolean ready = false;MyThread2() {}public void run() {String thrdName = Thread.currentThread().getName();System.out.println(thrdName + " 启动");while (waiting)System.out.println("等待:" + waiting);System.out.println("等待...");startWait();try {Thread.sleep(1000);} catch (Exception exc) {System.out.println(thrdName + " 中断。");}System.out.println(thrdName + " 结束。");}synchronized void startWait() {try {while (!ready)wait();} catch (InterruptedException exc) {System.out.println("wait() 中断。");}}synchronized void notice() {ready = true;notify();}
}-------运行以上代码,将输出以下信息-------
alive
alive
alive
我是java265.com定义的线程! 结束。
alive
我是java265.com定义的线程! 存活:false 状态:TERMINATED