Home >Java >javaTutorial >Java Example - Get Thread Status

Java Example - Get Thread Status

黄舟
黄舟Original
2017-01-20 11:22:581975browse

The life cycle of a thread in Java can be roughly divided into 5 states.

1. New state (New): A new thread object is created.

2. Ready state (Runnable): After the thread object is created, other threads call the start() method of the object. The thread in this state is located in the runnable thread pool, becomes runnable, and is waiting to obtain the right to use the CPU.

3. Running state (Running): The thread in the ready state obtains the CPU and executes the program code.

4. Blocked state (Blocked): The blocked state means that the thread gives up the right to use the CPU for some reason and temporarily stops running. Until the thread enters the ready state, it has a chance to move to the running state. There are three blocking situations:

(1) Waiting for blocking: The running thread executes the wait() method, and the JVM will put the thread into the waiting pool.

(2) Synchronization blocking: When the running thread acquires the synchronization lock of the object, if the synchronization lock is occupied by another thread, the JVM will put the thread into the lock pool.

(3) Other blocking: When a running thread executes the sleep() or join() method, or issues an I/O request, the JVM will put the thread into a blocked state. When the sleep() state times out, join() waits for the thread to terminate or times out, or the I/O processing is completed, the thread re-enters the ready state.

5. Death state (Dead): The thread has finished executing or exited the run() method due to an exception, and the thread ends its life cycle.

Java Example - Get Thread Status

The following example demonstrates how to obtain the status of a thread:

/*
 author by w3cschool.cc
 Main.java
 */class MyThread extends Thread{
   boolean waiting= true;
   boolean ready= false;
   MyThread() {
   }
   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();
   }}public class Main {
   public static void main(String args[]) 
   throws Exception{
      MyThread thrd = new MyThread();
      thrd.setName("MyThread #1");
      showThreadStatus(thrd);
      thrd.start();
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.waiting = false;
      Thread.sleep(50);
      showThreadStatus(thrd);
      thrd.notice();
      Thread.sleep(50);
      showThreadStatus(thrd);
      while(thrd.isAlive())
      System.out.println("alive");
      showThreadStatus(thrd);
   }
   static void showThreadStatus(Thread thrd) {
      System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() );
   }}

The output result of running the above code is:

……alive
alive
aliveMyThread #1 结束。alive
alive
alive
alive
alive
alive
aliveMyThread #1 存活:false 状态:TERMINATED

The above is the Java example - Get thread status content. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn