java.lang.Runnable ist eine Schnittstelle, die von einer Klasse implementiert werden soll, deren Instanzen von einem Thread ausgeführt werden sollen. Es gibt zwei Möglichkeiten, einen neuen Thread zu starten – Subclass-Thread und Runnable zu implementieren. Es ist nicht erforderlich, einen Thread in eine Unterklasse zu unterteilen, wenn eine Aufgabe nur durch Überschreiben erledigt werden kann laufen() Methode von Runnable.
Schritte zum Erstellen eines neuen Threads mit Runnable
- Erstellen Sie einen Runnable-Implementierer und implementieren Sie die run()-Methode.
- Instanziieren Sie die Thread-Klasse und übergeben Sie den Implementierer an den Thread. Thread verfügt über einen Konstruktor, der ausführbare Instanzen akzeptiert.
- Rufen Sie start() der Thread-Instanz auf. Der Start ruft intern run() des Implementierers auf.
- Durch den Aufruf von start() wird ein neuer Thread erstellt, der den in run() geschriebenen Code ausführt.
- Durch den direkten Aufruf von run() wird kein neuer Thread erstellt und gestartet, sondern er wird im selben Thread ausgeführt.
- Um eine neue Ausführungszeile zu starten, rufen Sie start() im Thread auf.
Beispiel:
java// Runnable Interface Implementation public class Geeks { private class RunnableImpl implements Runnable { // Overriding the run Method @Override public void run() { System.out.println(Thread.currentThread().getName() + ' executing run() method!'); } } // Main Method public static void main(String[] args) { System.out.println('Main thread is: ' + Thread.currentThread().getName()); // Creating Thread Thread t1 = new Thread(new Geeks().new RunnableImpl()); // Executing the Thread t1.start(); } }
Ausgabe
Main thread is: main Thread-0 executing run() method!
Erläuterung: Die Ausgabe zeigt zwei aktive Threads im Programm – Hauptthread und Thread-0. Die Hauptmethode wird vom Hauptthread ausgeführt, aber durch den Aufruf von „Start“ auf RunnableImpl wird ein neuer Thread erstellt und gestartet – Thread-0.
Bild mit CSS ausrichten
Ausnahmebehandlung in Runnable
Die ausführbare Schnittstelle kann keine geprüfte Ausnahme auslösen, aber RuntimeException kann von run() ausgelöst werden. Nicht abgefangene Ausnahmen werden vom Ausnahmehandler des Threads behandelt. Wenn die JVM keine Ausnahmen verarbeiten oder abfangen kann, druckt sie den Stack-Trace und beendet den Fluss.
Beispiel:
Alphabet in Zahlenjava
// Checking Exceptions in Runnable Interface import java.io.FileNotFoundException; public class Geeks { private class RunnableImpl implements Runnable { // Overriding the run method @Override public void run() { System.out.println(Thread.currentThread().getName() + ' executing run() method!'); // Checked exception can't be thrown Runnable must // handle checked exception itself try { throw new FileNotFoundException(); } catch (FileNotFoundException e) { System.out.println('Must catch here!'); e.printStackTrace(); } int r = 1 / 0; // Below commented line is an example // of thrown RuntimeException. // throw new NullPointerException(); } } public static void main(String[] args) { System.out.println('Main thread is: ' + Thread.currentThread().getName()); // Create a Thread Thread t1 = new Thread(new Geeks().new RunnableImpl()); // Running the Thread t1.start(); } }
Ausgabe:
Thread-0 executing run() method!
Must catch here!
java.io.FileNotFoundException
at RunnableDemo$RunnableImpl.run(RunnableDemo.java:25)
at java.lang.Thread.run(Thread.java:745)
Exception in thread 'Thread-0' java.lang.ArithmeticException: / by zero
at RunnableDemo$RunnableImpl.run(RunnableDemo.java:31)
at java.lang.Thread.run(Thread.java:745)
Erläuterung : Die Ausgabe zeigt, dass Runnable keine geprüften Ausnahmen auslösen kann FileNotFoundException In diesem Fall muss es für die Aufrufer geprüfte Ausnahmen in run() behandeln, aber RuntimeExceptions (ausgelöst oder automatisch generiert) werden von der JVM automatisch behandelt.
Quiz erstellen