java.lang.Körbar är ett gränssnitt som ska implementeras av en klass vars instanser är avsedda att exekveras av en tråd. Det finns två sätt att starta en ny tråd - Underklasstråd och implementera Runnable. Det finns inget behov av att underklassa en tråd när en uppgift kan utföras genom att endast åsidosätta sikt() metod för körbar.
Steg för att skapa en ny tråd med Runnable
- Skapa en körbar implementerare och implementera run()-metoden.
- Instantiera klassen Thread och skicka implementeraren till Thread Thread har en konstruktor som accepterar körbara instanser.
- Anropa start() av Thread-instans start anropar internt run() för implementeraren.
- Genom att anropa start() skapas en ny tråd som exekverar koden som skrivits i run().
- Att anropa run() direkt skapar och startar inte en ny tråd, den körs i samma tråd.
- För att starta en ny exekveringsrad, anrop start() på tråden.
Exempel:
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(); } }
Produktion
Main thread is: main Thread-0 executing run() method!
Förklaring: Utdatat visar två aktiva trådar i programmet - huvudtråd och huvudtråd-0 huvudmetoden exekveras av huvudtråden men startar startar på RunnableImpl skapar och startar en ny tråd - tråd-0.
kommando i nod js
Hanteringsundantag i Runnable
Körbart gränssnitt kan inte kasta markerat undantag men RuntimeException kan kastas från run(). Ofångade undantag hanteras av undantagshanteraren för tråden om JVM inte kan hantera eller fånga undantag, det skriver ut stackspåret och avslutar flödet.
Exempel:
alfabetet i siffrorjava
// 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(); } }
Produktion:
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)
Förklaring : Utdata visar att Runnable inte kan skicka markerade undantag FileNotFoundException i detta fall för anroparna måste den hantera kontrollerade undantag i run() men RuntimeExceptions (kastade eller autogenererade) hanteras av JVM automatiskt.
Skapa frågesport