Hacker ApprovedDepartments

Java virtual threads

Hacker Approved

Concurrency feature in Developer tools

Lets developers write simple blocking-style code that scales under load, without async/await, and shares the native thread interface. Critics point to carrier thread pinning.

Lets developers write simple blocking-style code that scales under load, without async/await, and shares the native thread interface. Critics point to carrier thread pinning.

27 people gave an opinion

recommend it
21
criticize it
6
approval share
78%
Each figure is one person. RecommendsCriticizes

Recommended in 8 of 13 months

  1. November 2025: recommended
  2. December 2025: recommended
  3. January 2026: not recommended
  4. February 2026: not recommended
  5. March 2026: recommended
  6. April 2026: recommended
  7. May 2026: recommended
  8. June 2026: recommended
  9. July 2026: not recommended
  10. August 2026: not recommended
  11. September 2026: recommended
  12. October 2026: recommended
  13. November 2026: not recommended (month in progress)

Why it carries the badge

  • 21 people recommend itNeeds 10 or more, met.
  • 3.5 recommenders for every criticNeeds 2 to 1 or better, met.
  • Recommended in 8 of 13 monthsNeeds 4 or more, met.

The same three rules apply to every product, and the badge can’t be bought. How the badge works

What people say about it

The reasons people give, with the number of comments that give each one. Open a reason to read what they said.

Why people recommend it

Each mark is one comment

  • Avoids async/await complexity

    “I did not think the benefits of better performance under load is worth the mental overhead of doing async everywhere.”

    Comment from 12 Sep 2026 in “A Design Space Exploration of Async/Await”

    “With Java 25 virtual threads, async definitely is no longer required”

    Comment from 1 Nov 2025 in “Async/Await is finally back in Zig”

    “Loom reduces the need to use them as the default application model”

    Comment from 24 May 2026 in “dotNET (OK, C#) gets union types”
  • Avoids function coloring

    “I think green threads (Java Virtual Threads, Go to an extent) are strictly superior to async/await.”

    Comment from 1 Nov 2025 in “Async/Await is finally back in Zig”

    “Java Virtual Threads are a superior paradigm to C#'s async/await and function coloring.”

    Comment from 24 May 2026 in “dotNET (OK, C#) gets union types”

    “Look at Go or Java virtual threads. Async I/O doesn't need function coloring.”

    Comment from 4 Dec 2025 in “Zig's new plan for asynchronous programs”
  • Cheap threads that scale under load

    “I did not think the benefits of better performance under load is worth the mental overhead of doing async everywhere.”

    Comment from 12 Sep 2026 in “A Design Space Exploration of Async/Await”

    “Java is achieving that goal waaay better with virtual threads and structured concurrency”

    Comment from 18 Oct 2026 in “Java sealed classes and exhaustive pattern matching”

    “simply asked why they have to be expensive and then made them not expensive”

    Comment from 12 Sep 2026 in “A Design Space Exploration of Async/Await”
  • Sequential code, hidden implementation

    “you have straightforward sequential code in the process and the actual implementation is invisible to the user”

    Comment from 5 May 2026 in “Async Rust never left the MVP state”

    “They share the same interface with native threads and free developers from the burdens of async programming.”

    Comment from 27 Apr 2026 in “What Async Promised and What It Delivered”

What people warn about

Each mark is one comment

What people said

26 of the 27 comments that mention it, newest first. Each links to the original comment.

“Java's rocky adoption of virtual threads”

CriticizesComment from 23 Oct 2026 in “Docker is weird”

“Java is achieving that goal waaay better with virtual threads and structured concurrency”

RecommendsComment from 18 Oct 2026 in “Java sealed classes and exhaustive pattern matching”

“Java's virtual threads are not preemptive.”

CriticizesComment from 27 Sep 2026 in “Go Concurrency Distilled”

“being 10 years late to the party is pretty bad”

CriticizesComment from 27 Sep 2026 in “Go Concurrency Distilled”

“I did not think the benefits of better performance under load is worth the mental overhead of doing async everywhere.”

RecommendsComment from 12 Sep 2026 in “A Design Space Exploration of Async/Await”

“simply asked why they have to be expensive and then made them not expensive”

RecommendsComment from 12 Sep 2026 in “A Design Space Exploration of Async/Await”

“Java Loom Virtual Threads (which I haven't used), etc.”

RecommendsComment from 11 Sep 2026 in “A Design Space Exploration of Async/Await”

“Java Virtual Threads and chill”

RecommendsComment from 11 Sep 2026 in “A Design Space Exploration of Async/Await”

“Structure concurrency/virtual threads seem like a good fit for Swing”

RecommendsComment from 20 Jun 2026 in “Project Valhalla, Explained: How a Decade of Work Arrives in JDK 28”

“Loom reduces the need to use them as the default application model”

RecommendsComment from 24 May 2026 in “dotNET (OK, C#) gets union types”

“Both are, IMO, inferior to Ada's TASK construct.”

CriticizesComment from 24 May 2026 in “dotNET (OK, C#) gets union types”

“Clearly legacy heavy weight threads, virtual or not, are not superior.”

CriticizesComment from 24 May 2026 in “dotNET (OK, C#) gets union types”

“Java Virtual Threads are a superior paradigm to C#'s async/await and function coloring.”

RecommendsComment from 24 May 2026 in “dotNET (OK, C#) gets union types”

“virtual threads are great this time around”

RecommendsComment from 12 May 2026 in “Library for fast mapping of Java records to native memory”

“you have straightforward sequential code in the process and the actual implementation is invisible to the user”

RecommendsComment from 5 May 2026 in “Async Rust never left the MVP state”

“They share the same interface with native threads and free developers from the burdens of async programming.”

RecommendsComment from 27 Apr 2026 in “What Async Promised and What It Delivered”

“the async stuff just feels like lipstick on a pig”

RecommendsComment from 25 Apr 2026 in “What Async Promised and What It Delivered”

“they work extremely well now”

RecommendsComment from 25 Apr 2026 in “What Async Promised and What It Delivered”

“Those do away with coloring by attacking the root of the problem”

RecommendsComment from 25 Apr 2026 in “What Async Promised and What It Delivered”

“java virtual threads are superior for the vast majority of use cases”

RecommendsComment from 18 Mar 2026 in “Java 26 is here, and with it a solid foundation for the future”

“Causing carrier threads to get pinned is still not good”

CriticizesComment from 17 Mar 2026 in “Java 26 is here, and with it a solid foundation for the future”

“we now have a more general solution that doesn't lead to API duplication (virtual threads)”

RecommendsComment from 17 Mar 2026 in “Java 26 is here, and with it a solid foundation for the future”

“Look at Go or Java virtual threads. Async I/O doesn't need function coloring.”

RecommendsComment from 4 Dec 2025 in “Zig's new plan for asynchronous programs”

“solve this problem in a much better way than most other languages”

RecommendsComment from 3 Dec 2025 in “Zig's new plan for asynchronous programs”

“I think green threads (Java Virtual Threads, Go to an extent) are strictly superior to async/await.”

RecommendsComment from 1 Nov 2025 in “Async/Await is finally back in Zig”

“With Java 25 virtual threads, async definitely is no longer required”

RecommendsComment from 1 Nov 2025 in “Async/Await is finally back in Zig”

Counts come from 1,795,640 Hacker News comments, November 2025 to November 2026. How we count. Report a mistake.