Difference between Runnable and Callable interface in java

Runnable and Callable both functional interface. Classes which are implementing these interfaces are designed to be executed by another thread.

Thread can be started with Ruunable and they are two ways to start a new thread: one is by subclassing Thread class and another is implementing Runnable interface.

Thread class does not have constructor for callable so we should use ExecutorService  class for executing thread.

Sr. No.KeyRunnableCallable
It belongs to Java.lang
It belongs to java.util.concurrent
Thread Creation
We can create thread by passing runnable as a parameter.
We can’t create thread by passing callable as parameter  
Return Type
Ruunable does not return anything
Callable can return results
It has run() method
It has call()method
Bulk Execution
It can’t be used for bulk execution of task
It can be used for bulk execution of task by invoking invokeAll().

Example of Runnable

public class RunnableExample implements Runnable {
   public void run() {
      System.out.println("Hello from a Runnable!");
   public static void main(String args[]) {
      (new Thread(new RunnableExample())).start();

Example of Callable

public class Main {
   public static void main(String args[]) throws InterruptedException, ExecutionException {
      ExecutorService services = Executors.newSingleThreadExecutor();
      Future<?> future = services.submit(new Task());
      System.out.println("In Future Object" + future.get());
import java.util.concurrent.Callable;

public class Task implements Callable {

   public String call() throws Exception {
      System.out.println("In call");
      String name = "test";
      return name;

Updated on: 09-Sep-2020

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started