java.lang.Runnable est une interface qui doit être implémentée par une classe dont les instances sont destinées à être exécutées par un thread. Il existe deux façons de démarrer un nouveau Thread : Sous-classe Thread et d'implémenter Runnable. Il n'est pas nécessaire de sous-classer un Thread lorsqu'une tâche peut être effectuée en remplaçant uniquement le courir() méthode de Runnable.
Étapes pour créer un nouveau fil de discussion à l'aide de Runnable
- Créez un implémenteur Runnable et implémentez la méthode run().
- Instanciez la classe Thread et transmettez l'implémenteur au Thread. Thread a un constructeur qui accepte les instances Runnable.
- Invoquer start() de l'instance de Thread start appelle en interne run() de l'implémenteur.
- L'appel de start() crée un nouveau Thread qui exécute le code écrit dans run().
- L’appel direct de run() ne crée pas et ne démarre pas un nouveau thread, il s’exécutera dans le même thread.
- Pour démarrer une nouvelle ligne d’exécution, appelez start() sur le thread.
Exemple:
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(); } }
Sortir
Main thread is: main Thread-0 executing run() method!
Explication: La sortie montre deux threads actifs dans le programme - le thread principal et la méthode principale Thread-0 est exécutée par le thread principal, mais l'invocation du démarrage sur RunnableImpl crée et démarre un nouveau thread - Thread-0.
idée intellij vs éclipse
Gestion des exceptions dans Runnable
L'interface exécutable ne peut pas lancer d'exception vérifiée mais RuntimeException peut être lancée à partir de run(). Les exceptions non interceptées sont gérées par le gestionnaire d'exceptions du thread. Si la JVM ne peut pas gérer ou intercepter les exceptions, elle imprime la trace de la pile et met fin au flux.
Exemple:
instruction de cas javajava
// 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(); } }
Sortir:
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)
Explication : La sortie montre que Runnable ne peut pas lancer d'exceptions vérifiées FileNotFoundException dans ce cas, pour les appelants, il doit gérer les exceptions vérifiées dans run() mais les RuntimeExceptions (lancées ou générées automatiquement) sont gérées automatiquement par la JVM.
Créer un quiz