EasyExperience level: 0-2 years1 min read

What's the difference between calling thread.start() and thread.run()?

Reviewed by Gurusankar M.

Asked inTCSInfosysWiproCapgemini
#thread#start#run#concurrency basics
Report issue

Short Answer

start() creates a new OS thread and the JVM calls run() on it. Calling run() directly just executes the code on the CURRENT thread — no concurrency at all. It's a classic interview trap and a real bug.

On this page

Concept Made Simple

Coffee Chat Question

“What's the difference between calling thread.start() and thread.run()?”

Remember It Faster

Mind Map Answer

start()
new thread → runs run() concurrently
run()
plain method call on current thread
start() twice
IllegalThreadStateException

Think Beyond the Expected

What If?

Code calls run() expecting parallelism but everything executes sequentially — why?

Because run() is just a method call — no new thread is created, so the work runs on the calling thread in order. Only start() hands the run() body to a fresh thread for concurrent execution.

Real World

A subtle production bug: someone 'starts' background work with run() and it silently blocks the request thread instead of running async — no error, just lost parallelism.

Interviewer's Expectation

Keywords they're listening for:

  • start spawns a thread
  • run is a direct call
  • no concurrency with run()
  • can't start() twice

Common Mistakes

  • Calling run() expecting a new thread
  • Reusing a Thread object (calling start twice)
  • Creating raw threads instead of using a pool

Best Practices

  • Use ExecutorService instead of raw Thread
  • Never call run() directly to 'start' work
  • Name your threads for easier debugging

Follow-up Questions

  1. What happens if you call start() twice on the same Thread?
  2. Why prefer ExecutorService over new Thread().start()?
  3. How does the JVM map a Java thread to an OS thread?

Continue Learning with AI

Take this question deeper with your favourite AI assistant. Pick a depth, copy the prompt, or open it directly — AI is your learning companion, not a shortcut.

Plain-language foundations

I'm preparing for a software engineering interview and want to understand this from scratch, as a beginner.

Topic: Threads & Pools (Multithreading)
Interview question: "What's the difference between calling thread.start() and thread.run()?"

Please:
1. Explain the core idea in simple, plain language, using an everyday analogy.
2. Define any technical terms you use.
3. Walk through one small, concrete example.
4. Finish with a single sentence I can easily remember.

Keep the tone friendly and assume I'm new to this topic.
Open inChatGPTGeminiClaude

Was this answer helpful?

Affiliate links

Equipment for a comfortable, productive setup.

As an Amazon Associate I earn from qualifying purchases.