Open In App

Implement Runnable vs Extend Thread in Java

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

As discussed in Java multi-threading article we can define a thread in the following two ways:

  • By extending Thread class
  • By implementing Runnable interface

In the first approach, Our class always extends Thread class. There is no chance of extending any other class. Hence we are missing Inheritance benefits. In the second approach, while implementing Runnable interface we can extends any other class. Hence we are able to use the benefits of Inheritance.
Because of the above reasons, implementing Runnable interface approach is recommended than extending Thread class.

The significant differences between extending Thread class and implementing Runnable interface:

  • When we extend Thread class, we can’t extend any other class even we require and When we implement Runnable, we can save a space for our class to extend any other class in future or now.
  • When we extend Thread class, each of our thread creates unique object and associate with it. When we implements Runnable, it shares the same object to multiple threads.

Lets have a look on the below programs for better understanding:




// Java program to illustrate defining Thread
// by extending Thread class
  
// Here we cant extends any other class
class Test extends Thread 
{
    public void run()
    {
        System.out.println("Run method executed by child Thread");
    }
    public static void main(String[] args)
    {
        Test t = new Test();
        t.start();
        System.out.println("Main method executed by main thread");
    }
}


Output:

Main method executed by main thread
Run method executed by child Thread




// Java program to illustrate defining Thread
// by implements Runnable interface
class Geeks {
    public static void m1()
    {
        System.out.println("Hello Visitors");
    }
}
  
// Here we can extends any other class
class Test extends Geeks implements Runnable {
    public void run()
    {
        System.out.println("Run method executed by child Thread");
    }
    public static void main(String[] args)
    {
        Test t = new Test();
        t.m1();
        Thread t1 = new Thread(t);
        t1.start();
        System.out.println("Main method executed by main thread");
    }
}


Output:

Hello Visitors
Main method executed by main thread
Run method executed by child Thread

NOTE : In the case of multithreading we cant predict the exact order of output because it will vary from system to system or JVM to JVM.

Reference: https://stackoverflow.com/questions/15471432/why-implements-runnable-is-preferred-over-extends-thread



Last Updated : 04 Oct, 2017
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads