Heim > Java > javaLernprogramm > Wie kann ich mit Ausnahmen umgehen, die von untergeordneten Threads in Java ausgelöst werden?

Wie kann ich mit Ausnahmen umgehen, die von untergeordneten Threads in Java ausgelöst werden?

Barbara Streisand
Freigeben: 2024-12-05 16:37:19
Original
823 Leute haben es durchsucht

How Can I Handle Exceptions Thrown from Child Threads in Java?

Behandeln von Ausnahmen, die von Threads ausgelöst werden

In Multithread-Anwendungen ist es wichtig, Ausnahmen zu behandeln, die von untergeordneten Threads im Hauptthread ausgelöst werden. Stellen Sie sich das folgende Szenario vor:

<br>public class Test erweitert Thread {<br> public static void main(String[] args) throws InterruptedException {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Test t = new Test();

try {
  t.start();
  t.join();
} catch (RuntimeException e) {
  System.out.println("** RuntimeException from main");
}

System.out.println("Main stoped");
Nach dem Login kopieren

}

@Override
public void run() {

try {
  while (true) {
    System.out.println("** Started");

    sleep(2000);

    throw new RuntimeException("exception from thread");
  }
} catch (RuntimeException e) {
  System.out.println("** RuntimeException from thread");

  throw e;
} catch (InterruptedException e) {

}
Nach dem Login kopieren

}
}

In diesem Beispiel wird eine im untergeordneten Thread ausgelöste Ausnahme nicht an den Hauptthread weitergegeben. Dies liegt daran, dass Java in Threads ausgelöste Ausnahmen nicht automatisch mit Handlern im Hauptthread verknüpft.

Lösung: Thread.UncaughtExceptionHandler

Um Ausnahmen von Threads zu behandeln, eine kann einen Thread.UncaughtExceptionHandler verwenden. Diese Schnittstelle stellt eine Methode uncaughtException() bereit, die aufgerufen wird, wenn eine nicht abgefangene Ausnahme in einem Thread auftritt.

Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
  @Override
  public void uncaughtException(Thread th, Throwable ex) {
    System.out.println("Uncaught exception: " + ex);
  }
};
Thread t = new Thread() {
  @Override
  public void run() {
    System.out.println("Sleeping ...");
    try {
      Thread.sleep(1000);
    } catch (InterruptedException e) {
      System.out.println("Interrupted.");
    }
    System.out.println("Throwing exception ...");
    throw new RuntimeException();
  }
};
t.setUncaughtExceptionHandler(h);
t.start();
Nach dem Login kopieren

Durch Festlegen des uncaughtExceptionHandler auf den Thread werden alle nicht abgefangenen Ausnahmen von der bereitgestellten Implementierung behandelt. Dadurch kann der Hauptthread Ausnahmen ordnungsgemäß erfassen und verarbeiten und so eine ordnungsgemäße Behandlung und Fehlerberichterstattung gewährleisten.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Ausnahmen umgehen, die von untergeordneten Threads in Java ausgelöst werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Neueste Artikel des Autors
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage