Overloading of Thread Class run() Method
In Java, overloading the run() method of the Thread class is possible. But the start() method of the Thread class internally calls only the no-argument run() method. The other overloaded versions of run() must be invoked explicitly like a normal method call.
Behavior of Overloaded run() Method
Letâs look at an example to understand what happens when we overload run() in a thread class.
Example: Overloading run() Method
// Java Program to illustrate the behavior of
// run() method overloading
class Geeks extends Thread {
public void run() {
System.out.println("GeeksforGeeks");
}
public void run(int i) {
System.out.println("Sweta");
}
}
class Test {
public static void main(String[] args) {
Geeks t = new Geeks();
t.start();
}
}
Output
GeeksforGeeks
Explanation: The run(int i) is defined, but the start() method only calls run(). The overloaded method run(int i) is ignored if not explicitly invoked.
Runtime stack provided by JVM for the above program:

Important Note on Thread Stack Behavior
The JVM creates a new call stack for the run() method when the thread is started using start(). If we manually call run(int i) or any other overloaded run() method, it executes in the main threadâs call stack, just like any regular method.
Example: Calling Overloaded run(int i) Method Explicitly
// Java Program to illustrate the execution of
// program using main thread
class Geeks extends Thread {
public void run() {
System.out.println("GeeksforGeeks");
}
public void run(int i) {
System.out.println("Sweta");
}
}
class Test {
public static void main(String[] args) {
Geeks t = new Geeks();
// Manually calling overloaded method
t.run(1);
}
}
Output
Sweta
Runtime stack provided by JVM for the above program:

Notes:
- We can overload the run() method in a thread class.
- The start() method will only invoke the no-arg run().
- The overloaded run() methods must be explicitly called and do not execute in a new thread.
- Try to avoid overloading run() method to reduce confusion. If different behavior is needed, use different method names.