Multithreading in Java

24 Feb, 2021
Multithreading is a Java feature that allows concurrent execution of two or more parts of a program for maximum utilization of CPU. Each part of such program is called a thread. So, threads are light-weight processes within a process.
Threads can be created by using two mechanisms : 
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
Extending the Thread class Implementing the Runnable Interface
Extending the Thread class 
Implementing the Runnable Interface
Thread creation by extending the Thread classWe create a class that extends the java.lang.Thread class. This class overrides the run() method available in the Thread class. A thread begins its life inside run() method. We create an object of our new class and call start() method to start the execution of a thread. Start() invokes the run() method on the Thread object.
Java
// Java code for thread creation by extending// the Thread classclass MultithreadingDemo extends Thread {    public void run()    {        try {            // Displaying the thread that is running            System.out.println(                "Thread " + Thread.currentThread().getId()                + " is running");        }        catch (Exception e) {            // Throwing an exception            System.out.println("Exception is caught");        }    }} // Main Classpublic class Multithread {    public static void main(String[] args)    {        int n = 8; // Number of threads        for (int i = 0; i < n; i++) {            MultithreadingDemo object                = new MultithreadingDemo();            object.start();        }    }}
Thread 15 is running
Thread 14 is running
Thread 16 is running
Thread 12 is running
Thread 11 is running
Thread 13 is running
Thread 18 is running
Thread 17 is running

Thread creation by implementing the Runnable InterfaceWe create a new class which implements java.lang.Runnable interface and override run() method. Then we instantiate a Thread object and call start() method on this object.  
Java
// Java code for thread creation by implementing// the Runnable Interfaceclass MultithreadingDemo implements Runnable {    public void run()    {        try {            // Displaying the thread that is running            System.out.println(                "Thread " + Thread.currentThread().getId()                + " is running");        }        catch (Exception e) {            // Throwing an exception            System.out.println("Exception is caught");        }    }} // Main Classclass Multithread {    public static void main(String[] args)    {        int n = 8; // Number of threads        for (int i = 0; i < n; i++) {            Thread object                = new Thread(new MultithreadingDemo());            object.start();        }    }}
Thread 13 is running
Thread 11 is running
Thread 12 is running
Thread 15 is running
Thread 14 is running
Thread 18 is running
Thread 17 is running
Thread 16 is running

Thread Class vs Runnable Interface 
If we extend the Thread class, our class cannot extend any other class because Java doesn’t support multiple inheritance. But, if we implement the Runnable interface, our class can still extend other base classes.We can achieve basic functionality of a thread by extending Thread class because it provides some inbuilt methods like yield(), interrupt() etc. that are not available in Runnable interface.Using runnable will give you an object that can be shared amongst multiple threads. 
If we extend the Thread class, our class cannot extend any other class because Java doesn’t support multiple inheritance. But, if we implement the Runnable interface, our class can still extend other base classes.
We can achieve basic functionality of a thread by extending Thread class because it provides some inbuilt methods like yield(), interrupt() etc. that are not available in Runnable interface.
Using runnable will give you an object that can be shared amongst multiple threads. 
This article is contributed by Mehak Narang. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
PrashantSingh27
shrivastava.sukriti
Java
Java
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.