Interview Q&A / Java

BeginnerQuick answer1 min readUpdated 3 Oct 2026

What happens if you call run() instead of start() on a Java thread?

SHORT ANSWER

start() creates a new thread of execution and calls run() on it. Calling run() directly is an ordinary method call on the current thread, so no concurrency happens. Calling start() twice throws IllegalThreadStateException.

Explain it simply

start() is hiring a new worker and giving them a task. run() is you doing the task yourself, while pretending you hired someone.

Example

java
Thread t = new Thread(() ->
    System.out.println("running in " + Thread.currentThread().getName()), "T1");

t.run();     // prints: running in main   (same thread, no new thread)
t.start();   // prints: running in T1     (a real new thread)

// t.start(); again  -> IllegalThreadStateException

What to say in the interview

"start() asks the JVM to allocate a new call stack and schedule the thread, and the JVM then calls run() there. A direct run() call just executes the body on the caller's thread, so the code runs sequentially and blocks the caller. A thread object can be started only once; a second start() throws IllegalThreadStateException, even after the thread has finished."

Common mistakes

  • Calling run() in a test and concluding that the program is multithreaded.
  • Trying to restart a finished thread instead of creating a new one.

#java#multithreading#thread

Related questions

Practise more Java questions

Test your recall with short answers, then return to the detailed explanations when you need context.

Open Java quick answers →

Get new questions like this by email

One short email when something new and useful lands. No spam, unsubscribe in one tap.

By subscribing you agree to the Privacy Policy.