What does start() function do in multithreading in Java? Last Updated : 23 Jul, 2025 Comments Improve Suggest changes 31 Likes Like Report We have discussed that Java threads are typically created using one of the two methods : (1) Extending thread class. (2) Implementing RunnableIn both the approaches, we override the run() function, but we start a thread by calling the start() function. So why don't we directly call the overridden run() function? Why always the start function is called to execute a thread?What happens when a function is called? When a function is called the following operations take place: The arguments are evaluated.A new stack frame is pushed into the call stack.Parameters are initialized.Method body is executed.Value is returned and current stack frame is popped from the call stack. The purpose of start() is to create a separate call stack for the thread. A separate call stack is created by it, and then run() is called by JVM.Let us see what happens if we don't call start() and rather call run() directly. We have modified the first program discussed here. Java // Java code to see that all threads are // pushed on same stack if we use run() // instead of start(). class ThreadTest extends Thread { public void run() { try { // Displaying the thread that is running System.out.println ("Thread " + Thread.currentThread().getId() + " is running"); } catch (Exception e) { // Throwing an exception System.out.println ("Exception is caught"); } } } // Main Class public class Main { public static void main(String[] args) { int n = 8; for (int i=0; i<n; i++) { ThreadTest object = new ThreadTest(); // start() is replaced with run() for // seeing the purpose of start object.run(); } } } Output: Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running Thread 1 is running We can see from above output that we get same ids for all threads because we have directly called run(). The program that calls start() prints different ids (see this) Comment K kartik 31 Improve K kartik 31 Improve Article Tags : Java Java-Multithreading Explore Java BasicsIntroduction to Java3 min readJava Programming Basics9 min readJava Methods6 min readAccess Modifiers in Java4 min readArrays in Java7 min readJava Strings8 min readRegular Expressions in Java3 min readOOP & InterfacesClasses and Objects in Java9 min readAccess Modifiers in Java4 min readJava Constructors4 min readJava OOP(Object Oriented Programming) Concepts10 min readJava Packages7 min readJava Interface7 min readCollectionsCollections in Java12 min readCollections Class in Java13 min readCollection Interface in Java4 min readIterator in Java4 min readJava Comparator Interface4 min readException HandlingJava Exception Handling6 min readJava Try Catch Block4 min readJava final, finally and finalize4 min readChained Exceptions in Java3 min readNull Pointer Exception in Java5 min readException Handling with Method Overriding in Java4 min readJava AdvancedJava Multithreading Tutorial3 min readSynchronization in Java7 min readFile Handling in Java4 min readJava Method References9 min readJava 8 Stream Tutorial7 min readJava Networking6 min readJDBC Tutorial5 min readJava Memory Management4 min readGarbage Collection in Java6 min readMemory Leaks in Java3 min readPractice JavaJava Interview Questions and Answers15+ min readJava Programs - Java Programming Examples7 min readJava Exercises - Basic to Advanced Java Practice Programs with Solutions5 min readJava Quiz1 min readJava Project Ideas For Beginners and Advanced15+ min read Like