logo

Interfejs uruchamialny w Javie

Java.lang.Runnable to interfejs, który ma zostać zaimplementowany przez klasę, której instancje mają być wykonywane przez wątek. Istnieją dwa sposoby rozpoczęcia nowego wątku - wątku podklasy i zaimplementowania Runnable. Nie ma potrzeby podklasowania wątku, jeśli zadanie można wykonać, zastępując tylko klasę Thread uruchomić() metoda Runnable. 

Kroki, aby utworzyć nowy wątek za pomocą Runnable 

  1. Utwórz implementator Runnable i zaimplementuj metodę run(). 
  2. Utwórz instancję klasy Thread i przekaż implementację do wątku Thread ma konstruktora, który akceptuje instancje Runnable.
  3. Wywołaj funkcję start() instancji wątku start wewnętrznie wywołując funkcję run() implementatora.
    • Wywołanie start() tworzy nowy wątek, który wykonuje kod zapisany w run().
    • Bezpośrednie wywołanie run() nie tworzy i nie rozpoczyna nowego wątku, który będzie działał w tym samym wątku.
    • Aby rozpocząć nową linię wykonania, wywołaj funkcję start() w wątku. 

Przykład:

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

Wyjście
Main thread is: main Thread-0 executing run() method! 

Wyjaśnienie: Dane wyjściowe pokazują dwa aktywne wątki w programie - wątek główny i metoda główna Thread-0 są wykonywane przez wątek główny, ale wywołanie startu na RunnableImpl tworzy i uruchamia nowy wątek - Thread-0.



lista połączona i lista tablic

Obsługa wyjątku w Runnable

Uruchomialny interfejs nie może zgłosić zaznaczonego wyjątku, ale wyjątek RuntimeException można zgłosić za pomocą funkcji run(). Nieprzechwycone wyjątki są obsługiwane przez procedurę obsługi wyjątków wątku, jeśli JVM nie może obsłużyć lub przechwycić wyjątków, drukuje ślad stosu i kończy przepływ. 

Przykład:

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

Wyjście:

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)

Wyjaśnienie : Dane wyjściowe pokazują, że Runnable nie może zgłaszać sprawdzonych wyjątków Wyjątek FileNotFoundException w tym przypadku dla osób wywołujących musi obsłużyć sprawdzone wyjątki w run(), ale wyjątki RuntimeException (zgłoszone lub wygenerowane automatycznie) są obsługiwane automatycznie przez maszynę JVM.

Utwórz quiz