java.lang.Runnable je rozhranie, ktoré má byť implementované triedou, ktorej inštancie sú určené na spustenie vláknom. Existujú dva spôsoby, ako spustiť nové vlákno – Podtrieda Thread a implementovať Runnable. Nie je potrebné podtriedu vlákna, keď je možné úlohu vykonať prepísaním iba položky spustiť() metóda Runnable.
Kroky na vytvorenie nového vlákna pomocou Runnable
- Vytvorte implementátor Runnable a implementujte metódu run().
- Instanciujte triedu Thread a odovzdajte implementátor do Thread Thread má konštruktor, ktorý akceptuje Runnable inštancie.
- Vyvolať štart() inštancie vlákna štart interne volá run() implementátora.
- Vyvolaním start() sa vytvorí nové vlákno, ktoré spustí kód napísaný v run().
- Priame volanie run() nevytvorí a nespustí nové vlákno, ktoré sa spustí v rovnakom vlákne.
- Ak chcete spustiť nový riadok vykonávania, zavolajte na vlákno štart().
Príklad:
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(); } }
Výstup
Main thread is: main Thread-0 executing run() method!
Vysvetlenie: Výstup zobrazuje dve aktívne vlákna v programe - hlavné vlákno a hlavnú metódu Thread-0 vykonáva hlavné vlákno, ale vyvolaním spustenia na RunnableImpl sa vytvorí a spustí nové vlákno - Thread-0.
ako previesť reťazec na celé číslo
Výnimka spracovania v Runnable
Spustiteľné rozhranie nemôže vyvolať začiarknutú výnimku, ale RuntimeException môže byť vyvolané z run(). Nezachytené výnimky spracuje obsluha výnimiek vlákna, ak JVM nedokáže spracovať alebo zachytiť výnimky, vytlačí stopu zásobníka a ukončí tok.
Príklad:
rímske číslice 1 100java
// 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(); } }
výstup:
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)
Vysvetlenie : Výstup ukazuje, že Runnable nemôže vyvolať začiarknuté výnimky FileNotFoundException v tomto prípade pre volajúcich musí spracovať kontrolované výnimky v run(), ale RuntimeExceptions (vyhodené alebo automaticky vygenerované) spracuje JVM automaticky.
Vytvoriť kvíz