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