Примеры Java - Мониторинг состояния потока

Java 实例Примеры Java

Следующий пример демонстрирует, как отслеживать состояние потока путем расширения класса Thread и использования метода currentThread.getName():

Файл 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() + "Alive:=" + thrd.isAlive() + " State:=" + thrd.getState()); } }

Выполнение приведённого выше кода даёт следующий вывод:

……
alive
alive
MyThread #1 terminating.
alive
……

Java 实例Примеры Java

Другие расширения