Java's Asynchronous Ecosystem

Java has accumulated a diverse toolbox for concurrency and asynchrony over the decades, ranging from classic threads to parallel streams, from Future to CompletableFuture, and from reactive libraries to the latest innovations, including virtual threads, structured concurrency, and the Vector API. But with so many options, the question is: which ones should we use today, which still matter, and which belong in the history books?

In this talk, we’ll explore the entire spectrum:

  • Classic Threads – the original concurrency primitive.
  • Parallel Streams – data parallelism for the collections era.
  • Futures & CompletableFuture – async results with callbacks and chaining.
  • Reactive Programming – backpressure, publishers, and the rise of frameworks like Reactor and RxJava.
  • Virtual Threads – Lightweight Concurrency Made Mainstream.
  • Structured Concurrency – Taming async chaos with lifetimes and scopes.
  • Vector API – data-level parallelism on modern CPUs.

We’ll also tackle the hard questions:

  • Do virtual threads really kill the need for reactive programming?
  • What does it mean by “hidden stack traces,” and how do they impact debugging and profiling?
  • Where should you invest today, and what patterns should you abandon permanently?

About Daniel Hinojosa

Daniel is a programmer, consultant, instructor, speaker, and recent author. With over 20 years of experience, he does work for private, educational, and government institutions. He is also currently a speaker for No Fluff Just Stuff tour. Daniel loves JVM languages like Java, Groovy, and Scala; but also dabbles with non JVM languages like Haskell, Ruby, Python, LISP, C, C++. He is an avid Pomodoro Technique Practitioner and makes every attempt to learn a new programming language every year. For downtime, he enjoys reading, swimming, Legos, football, and barbecuing.

More About Daniel »