java.lang.Runnable on rajapinta, jonka tulee toteuttaa luokassa, jonka ilmentymät on tarkoitettu suoritettavaksi säikeellä. On kaksi tapaa aloittaa uusi säie - Alaluokka säie ja toteuttaa Runnable. Ei ole tarvetta aliluokkaan säiettä, kun tehtävä voidaan tehdä ohittamalla vain juokse () Runnable-menetelmä.
Uuden ketjun luomisen vaiheet Runnablella
- Luo Runnable-toteutusohjelma ja toteuta run()-metodi.
- Instantoi säieluokka ja välitä toteuttaja Threadille Threadissa on konstruktori, joka hyväksyy suoritettavat ilmentymät.
- Invoke start() of Thread instance start sisäisesti kutsuu toteuttajan run().
- Start():n kutsuminen luo uuden säikeen, joka suorittaa run(:lla) kirjoitetun koodin.
- Run():n kutsuminen suoraan ei luo ja aloita uutta säiettä, vaan se ajetaan samassa säikeessä.
- Aloitaksesi uuden suoritusrivin kutsu start() säikeessä.
Esimerkki:
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(); } }
Lähtö
Main thread is: main Thread-0 executing run() method!
Selitys: Tulos näyttää kaksi ohjelman aktiivista säiettä - pääsäie ja Thread-0 -päämenetelmän suorittaa pääsäie, mutta aloituksen kutsuminen RunnableImpl:ssä luo ja aloittaa uuden säikeen - Thread-0.
java päivämäärä nyt
Käsittelypoikkeus Runnablessa
Suoritettava käyttöliittymä ei voi heittää tarkistettua poikkeusta, mutta RuntimeException voidaan heittää run(:sta). Säikeen poikkeuskäsittelijä käsittelee jääneet poikkeukset, jos JVM ei pysty käsittelemään tai sieppaamaan poikkeuksia, se tulostaa pinojäljityksen ja lopettaa kulun.
Esimerkki:
silmukalle javassajava
// 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(); } }
Lähtö:
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)
Selitys : Tulos osoittaa, että Runnable ei voi heittää valittuja poikkeuksia FileNotFoundException tässä tapauksessa soittajille sen on käsiteltävä run()-tarkistetut poikkeukset, mutta JVM käsittelee RuntimeExceptions (heitetut tai automaattisesti luodut) automaattisesti.
Luo tietokilpailu