logo

Java Runnable sučelje

java.lang.Runnable je sučelje koje treba implementirati klasa čije su instance namijenjene za izvođenje niti. Postoje dva načina za pokretanje nove niti - Subclass Thread i implementacija Runnable. Nema potrebe za potklasiranjem niti kada se zadatak može izvršiti nadjačavanjem samo trčanje() metoda Runnable. 

Koraci za stvaranje nove niti koristeći Runnable 

  1. Stvorite Runnable implementator i implementirajte metodu run(). 
  2. Instancirajte klasu Thread i proslijedite implementator Threadu Thread Thread ima konstruktor koji prihvaća Runnable instance.
  3. Invoke start() of Thread instance start interno poziva run() implementatora.
    • Pozivanjem start() stvara se nova nit koja izvršava kod napisan u run().
    • Izravno pozivanje run() ne stvara i ne pokreće novu nit, već će se izvoditi u istoj niti.
    • Za početak novog reda izvršenja pozovite start() na niti. 

Primjer:

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();  } } 

Izlaz
Main thread is: main Thread-0 executing run() method! 

Obrazloženje: Izlaz prikazuje dvije aktivne niti u programu - glavnu nit i Thread-0 glavnu metodu izvršava Glavna nit, ali pozivanje pokretanja na RunnableImpl stvara i pokreće novu nit - Thread-0.



instancirana java

Rukovanje iznimkom u Runnableu

Runnable sučelje ne može izbaciti provjerenu iznimku, ali se RuntimeException može izbaciti iz run(). Neuhvaćene iznimke obrađuje rukovatelj iznimkama niti, ako JVM ne može obraditi ili uhvatiti iznimke, on ispisuje praćenje stoga i prekida tok. 

Primjer:

for petlja u Javi
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();  } } 

Izlaz:

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)

Obrazloženje : Izlaz pokazuje da Runnable ne može izbaciti provjerene iznimke FileNotFoundException u ovom slučaju za pozivatelje mora obraditi provjerene iznimke u run(), ali RuntimeExceptions (bačene ili automatski generirane) JVM obrađuje automatski.

Napravi kviz