Green thread and Native thread in Java

The concepts of “green threads” and “native threads” in Java refer to different ways of implementing threads at the operating system level.

Green Threads

  • Definition: Green threads are threads that are scheduled by a virtual machine (VM) instead of natively by the underlying operating system. They are called “green” because they are managed in user space rather than kernel space.
  • Characteristics:
  • They are not managed by the OS, but by the runtime environment of the language (like the JVM).
  • They are lighter in terms of system resources.
  • Their performance is not dependent on the OS’s ability to manage threads.
  • Limitation: The major limitation of green threads is that they cannot take advantage of multi-core processors, as they are managed by the JVM which typically runs in a single process with a single core.
  • Usage in Java: Early versions of Java used green threads, but modern Java VMs typically use native threads.

Native Threads

  • Definition: Native threads are threads that are managed directly by the operating system. They are also known as OS-level threads.
  • Characteristics:
  • The scheduling and management of these threads are done by the OS.
  • They can leverage multi-core processors effectively, as the OS can distribute these threads across multiple cores.
  • Usage in Java: Modern Java VMs (like HotSpot used in Oracle JDK and OpenJDK) use native threads, which means Java threads map directly to OS-level threads.

Example

To illustrate the difference, consider a Java program running on a system with multiple cores.

  • Using Green Threads (Hypothetical Scenario):
  • Even if you create multiple threads in Java, all these threads would be managed within a single process by the JVM.
  • These threads wouldn’t run in true parallel on different cores but would be multiplexed (time-shared) by the JVM’s thread scheduler.
  • This might lead to inefficient CPU utilization, especially in compute-intensive applications.
  • Using Native Threads (Typical in Modern Java):
  • When you create multiple threads in Java, the JVM delegates the management of these threads to the OS.
  • The OS can then distribute these threads across different CPU cores, allowing true parallel execution.
  • This leads to better performance, especially in applications that can benefit from parallel processing.

Conclusion

In essence, the choice between green threads and native threads affects how your Java application’s concurrency is managed. While green threads offer simplicity and potentially more controlled scheduling, they fall short in terms of leveraging modern multi-core processors. Modern Java applications almost exclusively rely on native threads for better performance and scalability.

Other multithreading tutorial.

How to create a thread in java.
Thread life cycle in java.
Thread class constructors and methods in java.
How run() method get called using start() method.
The Runnable interface in java.
Thread Priority in Java with example.
Daemon thread in java with example.
Thread yield() method in java.
Thread sleep() method in java.
Thread join() method in java.
wait(),notify() and notifyAll() in java.
Difference between sleep() and wait() method in java.
Synchronization in java with example.