下文笔者讲述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