Java-Beispiele - Thread-Zustandsüberwachung

Java 实例Java-Beispiele

Das folgende Beispiel zeigt, wie der Zustand eines Threads überwacht wird, indem die Thread-Klasse erweitert und die Methode currentThread.getName() verwendet wird:

Main.java-Datei

class MyThread extends Thread{ boolean waiting= true; boolean ready= false; MyThread() { } public void run() { String thrdName = Thread.currentThread().getName(); System.out.println(thrdName + " starting."); while(waiting) System.out.println("waiting:"+waiting); System.out.println("waiting..."); startWait(); try { Thread.sleep(1000); } catch(Exception exc) { System.out.println(thrdName + " unterbrochen."); } System.out.println(thrdName + " wird beendet."); } synchronized void startWait() { try { while(!ready) wait(); } catch(InterruptedException exc) { System.out.println("wait() unterbrochen"); } } 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()); } }

Das Ausführen des obigen Codes erzeugt die folgende Ausgabe:

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

Java 实例Java-Beispiele

Andere Erweiterungen