Heim > Java > javaLernprogramm > So fangen Sie den InterruptedException-Fehler in Java ab

So fangen Sie den InterruptedException-Fehler in Java ab

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-04-18 20:10:34
nach vorne
923 Leute haben es durchsucht

Catch InterruptedException Error

Bitte überprüfen Sie den folgenden Codeausschnitt:

public class Task implements Runnable {
	private final BlockingQueue queue = ...;
	@Override
	 public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			String result = getOrDefault(() -> queue.poll(1L, TimeUnit.MINUTES), "default");
			//do smth with the result
		}
	}
	T getOrDefault(Callable supplier, T defaultValue) {
		try {
			return supplier.call();
		}
		catch (Exception e) {
			logger.error("Got exception while retrieving value.", e);
			return defaultValue;
		}
	}
}
Nach dem Login kopieren

Das Problem mit dem Code besteht darin, dass es nicht möglich ist, den Thread zu beenden, während auf ein neues Element in der Warteschlange gewartet wird, da die Unterbrechungsflagge nie wiederhergestellt wird :

1. Der Thread, der den Code ausführt, ist unterbrochen.
2.BlockingQueue # Die poll()-Methode löst eine InterruptedException aus und löscht das Interrupt-Flag.
3.Die Beurteilung der Schleifenbedingung (!Thread.currentThread().isInterrupted()) in while ist wahr, da die Markierung gelöscht wurde.

Um dieses Verhalten zu verhindern, fangen Sie immer die InterruptedException-Ausnahme ab, wenn eine Methode explizit (indem Sie sie zum Auslösen einer InterruptedException deklarieren) oder implizit (durch Deklarieren/Auslösen einer Rohausnahme) ausgelöst wird, und setzen Sie das Interrupt-Zeichen fort.

T getOrDefault(Callable supplier, T defaultValue) {
	try {
		return supplier.call();
	}
	catch (InterruptedException e) {
		logger.error("Got interrupted while retrieving value.", e);
		Thread.currentThread().interrupt();
		return defaultValue;
	}
	catch (Exception e) {
		logger.error("Got exception while retrieving value.", e);
		return defaultValue;
	}
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo fangen Sie den InterruptedException-Fehler in Java ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
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
Aktuelle Ausgaben
Kann Java als Backend des Webs verwendet werden?
Aus 1970-01-01 08:00:00
0
0
0
Installieren Sie JAVA
Aus 1970-01-01 08:00:00
0
0
0
Java kann nicht installiert werden
Aus 1970-01-01 08:00:00
0
0
0
Ist das in der Java-Sprache?
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage