java.lang.Runnable is an interface that is to be implemented by a class whose instances are intended to be executed by a thread. There are two ways to start a new Thread – Subclass
Thread and implement
Runnable. There is no need of subclassing
Thread when a task can be done by overriding only
run() method of
Steps to create a new
1. Create a
Runnable implementer and implement
Thread class and pass the implementer to the
Thread has a constructor which accepts
Thread instance, start internally calls
run() of the implementer. Invoking
start(), creates a new
Thread which executes the code written in
run() directly doesn’t create and start a new
Thread, it will run in the same thread. To start a new line of execution, call
start() on the thread.
Main thread is- main Thread-0, executing run() method!
Output shows two active threads in the program – main thread and Thread-0, main method is executed by the Main thread but invoking start on
RunnableImpl creates and starts a new thread – Thread-0.
What happens when Runnable encounters an exception ?
Runnable can’t throw checked exception but
RuntimeException can be thrown from
run(). Uncaught exceptions are handled by exception handler of the thread, if JVM can’t handle or catch exceptions, it prints the stack trace and terminates the flow.
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)
Output shows that
Runnable can’t throw checked exceptions,
FileNotFoundException in this case, to the callers, it must handle checked exceptions in the
run() but RuntimeExceptions (thrown or auto-generated) are handled by the JVM automatically.
Attention reader! Don’t stop learning now. Get hold of all the important Java and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready.
- Implement Runnable vs Extend Thread in Java
- Main App Implements Runnable | Concurrent Programming Approach 2
- Inner Class And Anonymous Inner Class that Implements Runnable | Concurrent Programming Approach 3
- Java 8 | Consumer Interface in Java with Examples
- Java 8 | BiConsumer Interface in Java with Examples
- Java 8 | DoubleToIntFunction Interface in Java with Example
- Java 8 | IntToDoubleFunction Interface in Java with Examples
- Java 8 | DoubleToLongFunction Interface in Java with Examples
- Java.util.function.BiPredicate interface in Java with Examples
- Java.util.function.DoublePredicate interface in Java with Examples
- Java.util.function.LongPredicate interface in Java with Examples
- Java.util.function.IntPredicate interface in Java with Examples
- Comparator Interface in Java with Examples
- Nested Interface in Java
- Java Interface methods
- Queue Interface In Java
- List Interface in Java with Examples
- SortedSet Interface in Java with Examples
- Map Interface in Java
- SortedMap Interface in Java with Examples
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to email@example.com. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.