百木园-与人分享,
就是让自己快乐。

获取线程状态的方法分享

转自:

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
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » 获取线程状态的方法分享

相关推荐

  • 暂无文章