јава.ланг.Руннабле је интерфејс који треба да буде имплементиран од стране класе чије инстанце су намењене да буду извршене од стране нити. Постоје два начина да се покрене нова нит – поткласа нит и имплементација Руннабле. Нема потребе да се поткласира нит када се задатак може обавити прегласавањем само рун() метода Руннабле.
Кораци за креирање нове нити користећи Руннабле
- Направите Руннабле имплементер и примените метод рун().
- Инстанцирајте класу Тхреад и проследите имплементатор у Тхреад Тхреад има конструктор који прихвата инстанце које се могу покренути.
- Инвоке старт() инстанце Тхреад старт интерно позива рун() имплементатора.
- Позивање старт() креира нову нит која извршава код написан у рун().
- Позивање рун() директно не ствара и не покреће нову нит, она ће се покренути у истој нити.
- Да бисте започели нову линију извршавања, позовите старт() у нити.
Пример:
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(); } }
Излаз
Main thread is: main Thread-0 executing run() method!
Објашњење: Излаз показује две активне нити у програму - главну нит и главни метод Тхреад-0 који се извршава од стране главне нити, али позивање старта на РуннаблеИмпл креира и покреће нову нит - Тхреад-0.
инт удвостручити
Руковање изузетком у Руннабле-у
Интерфејс који се може покренути не може да избаци проверени изузетак, али РунтимеЕкцептион може бити избачен из рун(). Неухваћеним изузецима рукује руковалац изузетком нити ако ЈВМ не може да обради или ухвати изузетке, он штампа траг стека и прекида ток.
Пример:
стринг јава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(); } }
Излаз:
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)
Објашњење : Излаз показује да Руннабле не може да избаци проверене изузетке ФилеНотФоундЕкцептион у овом случају позиваоцима мора да обрађује проверене изузетке у рун(), али РунтимеЕкцептионс (избачени или аутоматски генерисани) ЈВМ обрађује аутоматски.
Креирај квиз