Abstract
Concurrent applications, those serving multiple independent application actions simultaneously, are the bread and butter of server-side programming. The thread has long been software’s primary unit of concurrency, and has also served as a core construct for observability and debugging, but its cost was such that it could no longer efficiently represent a domain unit of concurrency, such as the session, request or transaction. As a result, various languages have seen a proliferation of both libraries and language constructs that offer scalable concurrency by abandoning the thread as the unit of software concurrency.
This talk will present how and why Java abstracted its existing thread construct to provide an alternative user-mode implementation of threads as opposed to offering a new concurrency construct. We will also briefly mention other transformative features recently added to the JVM in the areas of garbage collection and observability/profiling.