Java.Multithreading.What is “cooperative multitasking”? What type of multitasking does Java use? What is the reason for this choice?

🧠 What is Cooperative Multitasking?

🧩 Cooperative multitasking means:
Tasks (threads/processes) voluntarily yield control of the CPU so others can run.

🔧 How It Works:

  • The OS does not forcibly interrupt a running task.
  • It relies on each task to be nice and call yield() or similar.
  • If a task never yields, it can monopolize the CPU.

🛠 Used in:

  • Very early OSes (Windows 3.1, early MacOS)
  • Some embedded systems
  • Coroutines / fibers / green threads (e.g., Kotlin coroutines)

🔁 What is Preemptive Multitasking?

💪 Preemptive multitasking means the OS can interrupt a thread or process at any time, to switch to another.

🔧 How It Works:

  • The OS uses a timer interrupt to pause and resume threads
  • Threads don’t have to yield — the scheduler enforces fairness

🛠 Used in:

  • All modern OSes: Linux, Windows NT+, macOS, Android
  • Modern JVMs too (HotSpot, GraalVM, etc.)

☕ What Type of Multitasking Does Java Use?

✅ Java uses preemptive multitasking, because it relies on the host OS threads, and modern OSes use preemptive scheduling.

Java Threads Are:

  • Mapped to native OS threads (since Java 1.2+)
  • Scheduled by the OS thread scheduler
  • Managed preemptively by the OS

🤔 Why Java Uses Preemptive Multitasking?

ReasonExplanation
FairnessNo thread can block the CPU indefinitely
RobustnessNo need to trust threads to yield voluntarily
Better for real-world appsGood for unpredictable, heavy, or long-running tasks
Simplicity for developersYou don’t need to manually yield or manage cooperative flow
Leverages OS powerJVM lets OS handle complex scheduling and time-sharing

🛠 Can Java simulate Cooperative Multitasking?

Yes — through coroutines or user-mode threads, like:

  • Project Loom (Java Virtual Threads): lightweight threads with cooperative-style scheduling
  • Kotlin coroutines
  • RxJava, Akka, or async/await-style flows

These are managed in user space and may yield manually, but underlying OS threads are still preemptive.


🧠 Summary

FeatureCooperativePreemptive
Yield manually?✅ Required❌ Not required
OS interrupts at any time?❌ No✅ Yes
Java uses?❌ Not by default✅ Yes
Simulated in Java via Loom etc?✅ Yes (virtual threads, coroutines)✅ Underlying OS still preemptive
This entry was posted in Без рубрики. Bookmark the permalink.