Java 如何获取线程状态呢?

本文详细介绍了Java中线程的五种状态,并通过示例代码展示了如何获取线程的状态。从新建到运行,再到阻塞、死亡,每个状态的变化都有具体的场景解释,如wait()、sleep()和join()等方法的应用,帮助读者深入理解Java线程的生命周期和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值