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