79159926

Date: 2024-11-05 16:33:27
Score: 1.5
Natty:
Report link

Just an update on this topic in November 2024 to say Java JDK 21 now has released the concept of Virtual Thread.

Java threads are basically a wrapper for OS threads, and are known as platform threads. Therefore, threads are scarce resources, and therefore very valuable. If they are scarce, they are consequently expensive to have in abundance — approximately 2MB of memory is the cost to create a new thread.

Basically, we can say that threads are the “little place” where our code is executed.

Virtual thread

Forget all about threads being expensive and scarce resources. Virtual threads solve the problem of wasting time on threads, through a paradigm called coroutines. Virtual threads are still threads, and they act like threads, with the difference that they are no longer managed by the OS, like platform threads, but by the JVM. Now, for each platform thread, we will have an associated pool of virtual threads. How many virtual threads for each platform thread? As many as necessary. Each JVM can have millions of virtual threads.

With Java 21 and Spring Boot 3.2+, all you need is a parameter in application.properties

spring.threads.virtual.enabled=false

And your application will already be using virtual threads!

Before, there was a platform thread for each request. Now, for each task that needs to be executed, the platform thread will delegate this task to a virtual thread.

Instead of the platform thread itself executing the request, it delegates it to a Virtual Thread, and when this execution encounters blocking I/O, Java suspends this execution by placing the virtual thread context in the heap memory, and the platform thread is free to execute new tasks. As soon as the virtual thread is ready, it resumes execution.

Virtual threads are daemon threads, so they do not prevent the application from shutting down, unlike non-daemon threads in which the application ends when the thread ends.

Never use a pool

When we talk about thread pools or connection pools, we are implicitly saying: I have a resource that is limited, so I need to manage its use. But virtual threads are abundant, and a virtual thread pool should not be used.

The number of virtual threads we will have is equal to the number of simultaneous activities we execute. In short, for each simultaneous task you must instantiate a new virtual thread.

Reasons:
  • Blacklisted phrase (0.5): I need
  • Blacklisted phrase (1): update on this
  • Long answer (-1):
  • Has code block (-0.5):
  • Contains question mark (0.5):
  • Low reputation (1):
Posted by: EDG