Creating Thread with Runnable interface

The following program (CreateRunnable.java) demonstrates a method for creating threads with the java.lang.Runnable interface. The program code is given below for analysis. At the bottom, the run() method of the Runnable interface is also described for ready reference.

CreateRunnable.java

class MyRunnable implements Runnable {

    MyRunnable(String name) {
        Thread t = new Thread(this, name);
        System.out.println(name + " started.");
        t.start();
    }

    @Override
    public void run() {
        try {
            for(int i=0;i<5;i++){
                System.out.println(Thread.currentThread().getName() + " is running..");
                Thread.sleep(500);
            }
        }
        catch(InterruptedException e) {
            System.out.println(e);
        }
        System.out.println(Thread.currentThread().getName() + " ended.");
    }
}

public class CreateRunnable {
    
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName() + " started.");
        MyRunnable t = new MyRunnable("MyRunnable");
        try {
            for (int i = 0; i < 5; i++) {
                System.out.println((Thread.currentThread()).getName()
                        + " thread is running...");
                Thread.sleep(500);
            }
        } 
        catch (InterruptedException e) {  
            System.out.println(e);
        }
        System.out.println(Thread.currentThread().getName() + " ended.");
    }
}

Output:

Like the thread creation program of the previous section, each run of this program also produces different output sequences in terms of thread execution. As a matter of fact, the output is not predictable at all.

 

A closer look at the java.lang.Runnable interface

Runnable interface signature:

public interface Runnable 

The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run.

This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.

In addition, Runnable provides the means for a class to be active while not subclassing Thread. A class that implements Runnable can run without subclassing Thread by instantiating a Thread instance and passing itself in as the target. In most cases, the Runnable interface should be used if you are only planning to override the run() method and no other Thread methods. This is important because classes should not be subclassed unless the programmer intends on modifying or enhancing the fundamental behavior of the class.

Method Summary

public void run()

When an object implementing interface Runnable is used to create a thread, starting the thread causes the object’s run method to be called in that separately executing thread.