logo

Rozhraní Java Runnable

java.lang.Runnable je rozhraní, které má být implementováno třídou, jejíž instance mají být spouštěny vláknem. Existují dva způsoby, jak spustit nové vlákno - Subclass Thread a implementovat Runnable. Není potřeba podtřídu vlákna, když lze úlohu provést pouze přepsáním běh() metoda Runnable. 

Kroky k vytvoření nového vlákna pomocí Runnable 

  1. Vytvořte implementátor Runnable a implementujte metodu run(). 
  2. Vytvořte instanci třídy Thread a předejte implementátor do Thread Thread má konstruktor, který přijímá Runnable instance.
  3. Invoke start() instance Thread start interně volá run() implementátoru.
    • Vyvoláním start() se vytvoří nové vlákno, které spustí kód napsaný v run().
    • Přímé volání run() nevytvoří a nespustí nové vlákno, které poběží ve stejném vláknu.
    • Chcete-li zahájit nový řádek provádění, zavolejte start() ve vláknu. 

Pří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! 

Vysvětlení: Výstup zobrazuje dvě aktivní vlákna v programu - hlavní vlákno a hlavní metodu Thread-0 provádí hlavní vlákno, ale vyvoláním spuštění na RunnableImpl se vytvoří a spustí nové vlákno - Thread-0.



vracející pole v Javě

Výjimka zpracování v Runnable

Runnable rozhraní nemůže vyvolat zaškrtnutou výjimku, ale RuntimeException lze vyvolat z run(). Nezachycené výjimky zpracovává obslužná rutina výjimek vlákna, pokud JVM nemůže zpracovat nebo zachytit výjimky, vytiskne trasování zásobníku a ukončí tok. 

Příklad:

js splice
java
// 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)

Vysvětlení : Výstup ukazuje, že Runnable nemůže vyvolat zaškrtnuté výjimky FileNotFoundException v tomto případě pro volající musí zpracovat zaškrtnuté výjimky v run(), ale RuntimeExceptions (vyhozené nebo automaticky generované) jsou zpracovávány JVM automaticky.

Vytvořit kvíz