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