Java Starting a Thread: A Guide to Thread Execution

Learn how to start a thread in Java by creating a Thread object and using the start() method to invoke the run() method. Explore the syntax for initiating threads and understand the basics of multi-threading in Java.



Java - Starting a Thread

Once a Thread object is created, you can start it by calling the start() method, which executes a call to the run() method. The following is a simple syntax of the start() method:

Syntax of Starting a Thread

The following is the syntax of starting a thread:

Syntax

thread_obj.start();

Here, thread_obj is an object of the Thread class, and start() is the method of the Thread class.

Start a Thread by Implementing Runnable Interface

In this example, we're creating a class RunnableDemo by implementing the Runnable interface. The RunnableDemo class has the run() method implementation. In the main class TestThread, we've created RunnableDemo objects and used those objects to create two Thread objects. When Thread.start() is called on each thread object, the threads start processing, and the program is executed.

Example

Code Example

package com.tutorialsarena;

class RunnableDemo implements Runnable {
private String threadName;

RunnableDemo(String name) {
threadName = name;
System.out.println("Thread: " + threadName + ", " + "State: New");
}

public void run() {
System.out.println("Thread: " + threadName + ", " + "State: Running");
for (int i = 4; i > 0; i--) {
    System.out.println("Thread: " + threadName + ", " + i);
}
System.out.println("Thread: " + threadName + ", " + "State: Dead");
}
}

public class TestThread {
public static void main(String args[]) {
RunnableDemo runnableDemo1 = new RunnableDemo("Thread-1");
RunnableDemo runnableDemo2 = new RunnableDemo("Thread-2");
Thread thread1 = new Thread(runnableDemo1);
Thread thread2 = new Thread(runnableDemo2);
thread1.start();
thread2.start();
}
}
Output

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

Start a Thread by Extending Thread Class

In this example, we've created a ThreadDemo class that extends the Thread class. We're calling super(name) in the constructor to assign a name to the thread and called super.start() to start the thread processing.

Example

Code Example

package com.tutorialsarena;

class ThreadDemo extends Thread {
ThreadDemo(String name) {
super(name);
System.out.println("Thread: " + name + ", " + "State: New");
}

public void run() {
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
for (int i = 4; i > 0; i--) {
    System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
}
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
}

public void start() {
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
super.start();
}
}

public class TestThread {
public static void main(String args[]) {
ThreadDemo thread1 = new ThreadDemo("Thread-1");
ThreadDemo thread2 = new ThreadDemo("Thread-2");
thread1.start();
thread2.start();
}
}
Output

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-2, State: Dead

Start a Thread (Demonstrating sleep() Method)

In this example, we're creating a couple of objects of the ThreadDemo class, which extends the Thread class. We're calling super(name) in the constructor to assign a name to the thread and called super.start() to start the thread processing. Using the sleep() method, we're introducing a delay in processing.

Example

Code Example

package com.tutorialsarena;

class ThreadDemo extends Thread {
ThreadDemo(String name) {
super(name);
System.out.println("Thread: " + name + ", " + "State: New");
}

public void run() {
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
for (int i = 4; i > 0; i--) {
    System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
}

public void start() {
System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
super.start();
}
}

public class TestThread {
public static void main(String args[]) {
ThreadDemo thread1 = new ThreadDemo("Thread-1");
ThreadDemo thread2 = new ThreadDemo("Thread-2");
thread1.start();
thread2.start();
}
}
Output

Thread: Thread-1, State: New
Thread: Thread-2, State: New
Thread: main, State: Start
Thread: main, State: Start
Thread: Thread-1, State: Running
Thread: Thread-1, 4
Thread: Thread-2, State: Running
Thread: Thread-2, 4
Thread: Thread-2, 3
Thread: Thread-1, 3
Thread: Thread-1, 2
Thread: Thread-2, 2
Thread: Thread-2, 1
Thread: Thread-1, 1
Thread: Thread-1, State: Dead
Thread: Thread-2, State: Dead