Wie kann ein Thread einen anderen Thread in Java unterbrechen?
interrupt()-Methode: Wenn sich ein Thread im Schlaf- oder Wartezustand befindet, können wir mit der interrupt()-Methode die Ausführung dieses Threads unterbrechen, indem wir InterruptedException anzeigen. Ein Thread, der sich im Schlaf- oder Wartezustand befindet, kann mit Hilfe der Methode interrupt() der Klasse Thread unterbrochen werden.
Beispiel: Angenommen, es gibt zwei Threads und wenn einer der Threads in einem Aufruf der Methoden wait(), wait(long) oder wait(long, int) der Klasse Object oder von join() blockiert ist , join (long), join(long, int), sleep(long) oder sleep(long, int), Methoden dieser Klasse, dann wird ihr Interrupt-Status gelöscht und sie erhält eine InterruptedException, die einem anderen Thread die Möglichkeit gibt die entsprechende run()-Methode eines anderen Threads auszuführen, was zu einer hohen Performance führt und die Wartezeit der Threads verkürzt.
Verschiedene Szenarien, in denen wir einen Thread unterbrechen können
- Unterbrechen eines Threads, der nicht aufhört zu arbeiten: Im Programm behandeln wir die InterruptedException mit dem Try-and-Catch-Block, so dass jedes Mal, wenn ein Thread den aktuell ausgeführten Thread unterbricht, er aus dem Schlafzustand herauskommt, aber nicht aufhört zu arbeiten.
// Java Program to illustrate the
// concept of interrupt() method
// while a thread does not stops working
class
MyClass
extends
Thread {
public
void
run()
{
try
{
for
(
int
i =
0
; i <
5
; i++) {
System.out.println(
"Child Thread executing"
);
// Here current threads goes to sleeping state
// Another thread gets the chance to execute
Thread.sleep(
1000
);
}
}
catch
(InterruptedException e) {
System.out.println(
"InterruptedException occur"
);
}
}
}
class
Test {
public
static
void
main(String[] args)
throws
InterruptedException
{
MyClass thread =
new
MyClass();
thread.start();
// main thread calls interrupt() method on
// child thread
thread.interrupt();
System.out.println(
"Main thread execution completes"
);
}
}
Ausgabe:
Die Ausführung des Haupt-Threads wird abgeschlossen Untergeordneter Thread wird ausgeführt InterruptedException auftreten
- Unterbrechen eines Threads, der nicht mehr funktioniert: Im Programm lösen wir nach dem Unterbrechen des aktuell ausgeführten Threads eine neue Ausnahme im Catch-Block aus, damit er nicht mehr funktioniert.
// Java Program to illustrate the
// concept of interrupt() method
// while a thread stops working
class
Geeks
extends
Thread {
public
void
run()
{
try
{
Thread.sleep(
2000
);
System.out.println(
"Geeksforgeeks"
);
}
catch
(InterruptedException e) {
throw
new
RuntimeException(
"Thread "
+
"interrupted"
);
}
}
public
static
void
main(String args[])
{
Geeks t1 =
new
Geeks();
t1.start();
try
{
t1.interrupt();
}
catch
(Exception e) {
System.out.println(
"Exception handled"
);
}
}
}
Ausgabe:
Ausnahme im Thread "Thread-0" java.lang.RuntimeException: Thread unterbrochen
- Unterbrechen eines normal funktionierenden Threads: Im Programm ist während der Ausführung des Threads keine Ausnahme aufgetreten. Hier setzt interrupt nur das Interrupt-Flag auf true, was später vom Java-Programmierer verwendet werden kann.
// Java Program to illustrate the concept of
// interrupt() method
class
Geeks
extends
Thread {
public
void
run()
{
for
(
int
i =
0
; i <
5
; i++)
System.out.println(i);
}
public
static
void
main(String args[])
{
Geeks t1 =
new
Geeks();
t1.start();
t1.interrupt();
}
}
Ausgabe:
0 1 2 3 4
Dieser Artikel wurde von Bishal Kumar Dubey beigesteuert . Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel über Contribute.geeksforgeeks.org schreiben oder Ihren Artikel per E-Mail an Contribute@geeksforgeeks.org senden. Sehen Sie, wie Ihr Artikel auf der Hauptseite von GeeksforGeeks erscheint, und helfen Sie anderen Geeks.