Java 如何获取线程状态呢?

java-教程王 Java教程 发布时间:2022-04-29 09:26:21 阅读数:9918 1
下文笔者讲述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.Java265.com/JavaCourse/202204/3187.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者