Java 如何获取线程状态呢?
下文笔者讲述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
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。