Heim  >  Artikel  >  Java  >  So lösen Sie eine Warteanrufunterbrechung in Java

So lösen Sie eine Warteanrufunterbrechung in Java

WBOY
WBOYnach vorne
2023-04-25 10:34:061285Durchsuche

1. Lösung

(1) Bei Verwendung von Java-Threads wird häufig die Wartemethode verwendet. Wenn sie beim Aufruf der Wartemethode unterbrochen wird, erfasst der JVM die Unterbrechung und ruft weiterhin die Warteanweisung auf.

(2) Selbst wenn Sie zu diesem Zeitpunkt die Interrupt-Sendemethode verwenden, tritt keine Auswirkung auf.

(3) Die Wartemethode muss gekapselt werden, die Ausnahme abfangen und dann die Ausführung der Ausnahme beenden.

2. Beispiel

public static void wait(Object obj) {
        boolean interrupted = true;
        while (interrupted) {
            interrupted = false;
            try {
                obj.wait();
            }
            catch (InterruptedException e) {
                interrupted = true;
            }
        }
    }
 
    public static void wait(Object obj, int timeout) {
        boolean interrupted = true;
        long startTime = System.currentTimeMillis();
        int sleepTimeout = timeout;
 
        while (interrupted) {
            interrupted = false;
            try {
                obj.wait(sleepTimeout);
            }
            catch (InterruptedException e) {
                interrupted = true;
                long now = System.currentTimeMillis();
                sleepTimeout -= now - startTime;
                startTime = now;
                if (sleepTimeout < 0) {
                    interrupted = false;
                }
            }
        }
}

Das obige ist der detaillierte Inhalt vonSo lösen Sie eine Warteanrufunterbrechung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen