Nearby lessons
67 of 125Java - Multithreading Overview
- What a thread is and how it is different from a process
- Two ways to create a thread: Thread class and Runnable interface
- The thread life cycle (states)
- How threads cooperate: synchronized, wait and notify
- The modern way: Executors, Callable and lambdas
Multithreading Overview is a core concept of the Java language. This lesson explains What is a Thread?, Two Ways to Create a Thread and Process vs Procedure vs Thread with complete, runnable code examples, clear step-by-step explanations, and common mistakes to avoid with exam-style MCQs at the end.
What is a Thread?
A thread is a small, independent unit of work running inside a program. A program that can run several threads at the same time is a multithreaded program.
Real-life example: while you are downloading a big file (thread 1), you can also chat with a friend (thread 2) and listen to music (thread 3) — all at the same time. In a program, threads let these tasks run together instead of one after another.
| Point | Process | Thread |
|---|---|---|
| What is it | A running program | A unit of work inside a program |
| Memory | Each process has its own separate memory | Threads share the program's memory |
| Cost | Heavy, slow to create | Light, fast to create |
| Communication | Complicated (IPC) | Easy (they share data) |
| Example | Running Word, running Chrome | Two tabs inside Chrome |
Two Ways to Create a Thread
Method 1 — Extend the Thread class
Output may differ every run — that is the magic of threads. Both loops run at the same time, so the printed order is not fixed.
Method 2 — Implement the Runnable interface (Recommended)
Java does not allow a class to extend more than one class. If your class already extends some class, it cannot also extend Thread. The solution: implement Runnable and give the job to a Thread object.
Two Ways to Create a Thread
Process vs Procedure vs Thread
Three similar words that students confuse. The classic material separates them clearly:
| Word | Meaning |
|---|---|
| Procedure | A set of instructions written to do one task (a function). It is just code, not running. |
| Process | A running program — one procedure (or more) actually executing in memory. |
| Thread | A single path of execution inside a process. One process can have many threads. |
Example: Notepad is a process. Inside it, typing, spell-check and autosave can each be a thread running at the same time.
- A thread is a small unit of work; a process is a running program.
- Create a thread by extending Thread or (better) implementing Runnable.
- Life cycle: NEW -> RUNNABLE -> BLOCKED/WAITING/TIMED_WAITING -> TERMINATED.
- Shared data races when many threads change it; synchronized gives a lock.
- wait/notify let threads talk; they need the lock.
- Deadlock = threads waiting on each other's locks; avoid by consistent lock order.
- Real projects use Executors + Callable instead of raw threads.