转自:
http://www.java265.com/JavaCourse/202204/3187.html
下文笔者讲述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
来源:https://www.cnblogs.com/java265/p/16205503.html
本站部分图文来源于网络,如有侵权请联系删除。