Using Runnable or extending the Thread class

Java does not support multiple inheritance. If your class already extends from a superclass and want to make it threadable, you will have to use the Runnable interface. In general, it’s good OO practice if you implement Runnable thereby saying your class is a generic Thread, instead of extending it saying “it’s kindof a thread but i want to modify some of the Thread class behavior”. Also, you typically don’t know what’s ahead in your project. If you extend from Thread and your design changes in such a way that you have to extend from another class, you’ll have to do some extra work.

In this example, class A extends from Thread, and class B implements Runnable.

Main.java:

import java.util.*;
import java.io.*;
  
public class Main {   
   public static void main(String[] args) {
 
      // starts object of class extending Thread
      new A().start();
 
      // starts object of class implementing Runnable
      new Thread(new B()).start();
   }
}
 
class A extends Thread {
   public void run() {
      System.out.println("Thread A started (and over)");
   }
}
 
class B implements Runnable {
   public void run() {
      System.out.println("Thread B started (and over)");
   }
}