Latest web development tutorials

Java Примеры - Получить состояние потока

Java Примеры Java Примеры

Java потоки в жизненном цикле можно разделить на пять государств.

  • 1. Создайте новое состояние (новый): создает новый объект потока.
  • 2. готовый состояние (Runnable): После того, как объект потока создается, другой поток вызывает метод запуска () объекта. Состояние нити запускаемых потоков в бассейне находится, стал работоспособным, ожидая, чтобы получить право на использование процессора.
  • 3. Выполнить Статус (Запуск): готовый состояние поток получает процессор, выполнения кода программы.
  • 4. блокировал (Blocked): поток блокируется по какой-то причине отказаться от права на использование CPU временно прекращает работу. До тех пор пока нити в состояние готовности, возможность не бегать. Дело блокировали три категории:
    • (A), ожидая блокирования: выполнения ждать Вход резьбы () метод, JVM будет поток в пул ожидания.
    • (В), синхронное блокирующих потоков, выполняющихся в получении объекта блокировки синхронизации, если блокировка синхронизации занята другим потоком, виртуальная машина будет блокировать в пуле потоков.
    • Способ запуска поток выполнения сна () или присоединиться (), или выдать запрос ввода / вывода, JVM будет установлен поток заблокирован: (C) Другие заблокированы. Когда сон () тайм-аут, присоединиться () ожидает поток завершается или времени ожидания, или I / O обработка завершается, поток в состояние готовности снова.
  • 5. Смерть состояние (умершие): выполнение потока из-за неправильного или более из метода Run (), конец нити жизненного цикла.

006

В следующем примере показано, как получить состояние резьбы:

/*
 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() );
   }
}

Приведенный выше код выполняется выход:

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

Java Примеры Java Примеры