Heim > Java > javaLernprogramm > Hauptteil

InterruptedException in Java – Lösung für Thread-Unterbrechungsausnahme

王林
Freigeben: 2023-06-25 11:15:07
Original
2328 Leute haben es durchsucht

InterruptedException in Java – Lösung für Thread-Unterbrechungsausnahme

In der Java-Multithread-Programmierung ist Thread-Unterbrechungsausnahme ein häufiges Problem und ein Problem, das Aufmerksamkeit erfordert. Wenn ein Thread ausgeführt wird und ein anderer Thread ihn unterbrechen möchte, wird eine InterruptedException ausgelöst. In diesem Artikel werden die Ursachen und Lösungen von InterruptedException erläutert.

  1. Ursache von InterruptedException

InterruptedException ist eine Ausnahme, die aufgrund der Unterbrechung des Threads ausgelöst wird. Während ein Thread ausgeführt wird, kann ein anderer Thread ihn über die Methode interrupt() unterbrechen. Wenn sich der unterbrochene Thread in einem Wartezustand befindet, z. B. beim Warten auf E/A-Vorgänge oder beim Warten auf eine Sperre, wird eine InterruptedException ausgelöst.

Wenn beispielsweise Thread t1 im folgenden Code Thread.sleep() ausführt, unterbricht Thread t2 die Ausführung, sodass t1 eine InterruptedException-Ausnahme auslöst.

Thread t1 = new Thread(() -> {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        System.out.println("Thread interrupted");
    }
});
t1.start();

Thread t2 = new Thread(() -> {
    t1.interrupt();
});
t2.start();
Nach dem Login kopieren
  1. Lösung für InterruptedException

Wenn ein Thread eine InterruptedException auslöst, müssen wir entsprechend der spezifischen Situation damit umgehen. Normalerweise sollten wir Thread.currentThread().interrupt() im Catch-Block aufrufen, um den Thread erneut zu unterbrechen, damit der obere Aufrufer weiß, dass der Thread unterbrochen wurde.

Im folgenden Code prüft der Thread t1 beispielsweise nach Abschluss der Ausführung, ob er unterbrochen wurde, und unterbricht sich im Catch-Block erneut.

Thread t1 = new Thread(() -> {
    try {
        Thread.sleep(5000);
        System.out.println("Thread finished");
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        System.out.println("Thread interrupted");
    }
});
t1.start();

Thread t2 = new Thread(() -> {
    t1.interrupt();
});
t2.start();
Nach dem Login kopieren

Wenn der Thread außerdem einige Vorgänge ausführt, die das Bereinigen von Ressourcen erfordern, z. B. das Freigeben von Sperren oder das Schließen von Dateien, sollten wir außerdem Reinigungsvorgänge im Catch-Block durchführen. Im folgenden Code gibt Thread t1 beispielsweise nach Abschluss der Ausführung Ressourcen frei und prüft, ob die Ausführung unterbrochen wurde.

Thread t1 = new Thread(() -> {
    Lock lock = new ReentrantLock();
    lock.lock();
    try {
        Thread.sleep(5000);
        System.out.println("Thread finished");
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
        System.out.println("Thread interrupted");
    } finally {
        lock.unlock();
    }
});
t1.start();

Thread t2 = new Thread(() -> {
    t1.interrupt();
});
t2.start();
Nach dem Login kopieren

Kurz gesagt, die Definition einer InterruptedException-Ausnahmebehandlungsmethode ist sehr wichtig. Sie kann uns helfen, Thread-Unterbrechungsvorgänge korrekt zu handhaben und die Komplexität des Codes so weit wie möglich zu reduzieren.

Das obige ist der detaillierte Inhalt vonInterruptedException in Java – Lösung für Thread-Unterbrechungsausnahme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage