Java 21 new feature: Virtual Threads

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 150

  • @DoubleM55
    @DoubleM55 Год назад +68

    FInally! We can just let our threads block on IO, as God intended!!!

    • @SirSomnolent
      @SirSomnolent Год назад +1

      My first thought watching this was "oh god, no".

  • @yemzibossa
    @yemzibossa Год назад +47

    Your page becomes my number #1 source of learning Java faster. I love to always watch this channel. Thanks for all you do, Sir.

  • @zoladkow
    @zoladkow Год назад +2

    wow, an absolutely masterfully extended way of saying: "cheaper threads, to better hide the complexity of asynchroneous". I was just wondering why not Promises, but Virtual Threads (with essentially non-public async framework) instead. Now i know. Thanks

  • @andikovi1286
    @andikovi1286 Год назад +11

    Never heard anybody else explain in such a detailed and simple/friendly way. Congratulations!

  • @AyushmanAdhikary
    @AyushmanAdhikary 2 месяца назад +3

    Very informative and insightful as always. Highly grateful to have been instructed by you on RUclips and other platforms.

    • @java
      @java  2 месяца назад +1

      Great to hear!

  • @laurentjeanpierre3662
    @laurentjeanpierre3662 Год назад +10

    Thanks, Jose.
    I think your explanations are just at the right balance between technical and understandable. Your shorts are almost the only shorts I watch on RUclips! Please keep on that way.
    I also need a copy of your mug of coffee, for it seems to empty itself only at the end of your task ;-).
    Merci !

  • @PravinJain-i1q
    @PravinJain-i1q Год назад +7

    Thanks José for making this video,
    Really easy to understand the mechanics of Virtual Threads, how they work under the hood.

  • @leolewis7754
    @leolewis7754 Год назад +13

    Thanks José for presenting this in such an easy way to understand, especially on the limitations of the system. I did read in some places that synchronized code would always be pinned to a platform thread which was detering me from investigating moving to jdk 21 to benefit from virtual threads given the fair amount of synchronized code we unfortunately have in our legacy applications. But I will now revisit that plan with the information you provided. Thanks again

    • @JosePaumard
      @JosePaumard Год назад +1

      Thank you! Glad I could help!

  • @andersonanjos4455
    @andersonanjos4455 Год назад +1

    If Mr. José Paumard is not an actor, maybe he should. This video is pretty funny!!! 😅
    Nice to get a chance to delve into such complex content in a lighter and interesting way.
    Thank you, José 👏👏👏

  • @nickngn
    @nickngn 11 месяцев назад +3

    Nothing to say except: "Awesome!"

  • @Parkhill57
    @Parkhill57 Год назад +44

    the piano is driving me crazy

    • @vladimirdyuzhev
      @vladimirdyuzhev 2 месяца назад +1

      There is a whole asylum of us now.

  • @AleksandarT10
    @AleksandarT10 Год назад +7

    Greatly and well presented. Keep up the good work Jose! We need more on this topic

    • @JosePaumard
      @JosePaumard Год назад +1

      Thank you! I will publish more when we have the new version of Structured Concurrency. Stay tune!

  • @yordanov5.0
    @yordanov5.0 9 месяцев назад

    Magnificent explanation of pure engineering art. "Project Loom" is indeed a revolutionary masterpiece. 👏👏👏

  • @konstantinatwork3105
    @konstantinatwork3105 Год назад +12

    Awesome video. Very well structured and presented!

    • @java
      @java  Год назад +1

      Glad you liked it!

  • @shahzad4455
    @shahzad4455 Год назад +3

    José, I am becoming addicted to your cup of Java 🙂

  • @jackofnotrades15
    @jackofnotrades15 9 месяцев назад

    Amazing explanation...José Explaining both approaches and doing it so well with code is as always great.

  • @DimitriJohansson
    @DimitriJohansson 11 месяцев назад +2

    Very great and detailed explanations of the topic!
    Thanks!

  • @hbobenicio
    @hbobenicio Год назад +1

    Amazing talk! Really complete and comprehensive! Thank you for that.

  • @rilwanj
    @rilwanj 11 месяцев назад

    Thank you, that was a great breakdown, I like to see more presentations from this guy again.

  • @LawrenceDCodes.
    @LawrenceDCodes. Год назад +4

    Excited to dig into this

  • @Giogiova71
    @Giogiova71 3 месяца назад

    I liked to listen the before and after virtual threads, it makes much clear everything.

  • @natbirchall1580
    @natbirchall1580 Год назад +5

    This is why I stick with java. The quality of people working on it is amazing.

  • @tuanm_
    @tuanm_ Год назад +3

    Perfect! Thank you, Sir!

  • @YvesDautremay
    @YvesDautremay Год назад +5

    Merci José, super intéressant !

  • @shurazeta
    @shurazeta Год назад

    I like when this gentleman takes a sip of his coffe!!!

  • @cpthermes3703
    @cpthermes3703 9 месяцев назад

    He explained it so clearly. Bravo

  • @PavanKumar-IT
    @PavanKumar-IT 5 месяцев назад

    Wow.. Loved your session. Super knowledgeable. Thank you very much

  • @D0gma
    @D0gma Год назад +7

    Continue ton super travail José ;)

  • @RYahiaoui
    @RYahiaoui Год назад +4

    Great Explanation ! Thank you

  • @juanddperez
    @juanddperez 10 месяцев назад

    Oh là là, une magnifique explication! merci!

  • @usern90210
    @usern90210 Год назад +5

    Absolutely fantastique explainer as usual! Also so excited for Java 21 :D
    But as an aside, please, please, remove the white flashing transitions. It hurts my old eyes and I can think that folks with photo-sensitivity or epilepsy can have a hard time with these as well.
    Cheers,
    Niss

    • @JosePaumard
      @JosePaumard Год назад +3

      Thank you Niss! I wasn't aware of this problem with flashing transitions, thank you for reporting. I will change that in the next videos.

    • @usern90210
      @usern90210 Год назад +2

      Merci Infinimenent@@JosePaumard
      Always a pleasure to follow your vids ^__^

  • @RicardoSilvaTripcall
    @RicardoSilvaTripcall Год назад +5

    Great Explanation !!!

  • @Panem78
    @Panem78 9 месяцев назад

    Very clear and nice explanations. Well done !

  • @Stoic_Cat_
    @Stoic_Cat_ Месяц назад

    Really thorough explanation!

  • @ydexpert131
    @ydexpert131 Год назад

    Awesome explanations sir....Really nicely explained in plain simple language....

  • @codeZarathustra
    @codeZarathustra Год назад +2

    Great explanation master
    Gracias!

  • @Braket21
    @Braket21 11 месяцев назад +1

    Perfect presentation ! Thank you ! Pretty that sonar don't support it yet .. hope it is coming soon.

  • @wernerjacobs3282
    @wernerjacobs3282 Год назад

    Good explanation as always, thanks a lot for these videos

  • @Alberto_Cavalcante
    @Alberto_Cavalcante Год назад +2

    Thanks José!

  • @perrinnjietche463
    @perrinnjietche463 2 месяца назад

    What a nice way to explain java virtual threads. 👏 Thanks Jose !
    Fun fact... I once run I/O in parallel Streams !🥲

  • @L36654
    @L36654 Год назад

    Amazing feature! Thanks for the explanation too!!

  • @kenkrueger65
    @kenkrueger65 Год назад

    Thank you for this - that coffee must have been getting cold by the end

    • @JosePaumard
      @JosePaumard Год назад

      Not quite, that's a good cup, it can keep the coffee warm for long enough 😉

  • @kwhandy
    @kwhandy Год назад

    he holding java coffee is just 💥💥💥

  • @hawaii3535
    @hawaii3535 9 месяцев назад

    Very great explanation! Thank you sir

  • @christoph9198
    @christoph9198 Год назад +5

    Very great explanation. Emphasized and repeated the important parts. 😀

  • @Andi-dp9hy
    @Andi-dp9hy Год назад +1

    Best loom explanation 👌

  • @willemcheizoo521
    @willemcheizoo521 Год назад

    José thanks for this clear explanation!

  • @Congcoipro
    @Congcoipro Год назад +1

    Thank you so much for your excellent presentation, Sir!
    Please give me some short explanations regarding the differences between Virtual Threads and the NIO mechanism.
    I appreciate your time.

  • @alessandrobx5850
    @alessandrobx5850 Год назад +2

    Awesome explanation

    • @java
      @java  Год назад

      Glad you think so!

  • @sombriks
    @sombriks Год назад +1

    obrigado José!

  • @scratchanitch
    @scratchanitch 12 дней назад

    Looking forward to eventually seeing a rewrite of the Azure SDK which currently relies on Reactor for its async APIs (although the code itself appears to be high quality, the stack traces are massive and virtually unreadable).

  • @felipemarchant4653
    @felipemarchant4653 4 месяца назад

    "You're not doing I/O in your parallel streams, right?". Oh God, thankfully not. 😅 Very good video.

  • @Aditya-k9d
    @Aditya-k9d 3 месяца назад +1

    Hi @Java / @JosePaumard, I want to understand the following -
    1. How is it ensured that all the blocking operations invoked by any arbitrary code (excluding native method calls and synchronized blocks) from a virtual thread are managed by the Continuation framework? Have all the potential blocking points in the JDK been identified and adapted to support this?
    2. Consider a third-party library that is confirmed not to use native methods or synchronized blocks. While calling it from a virtual thread, is it still necessary to manually verify that it will not accidentally block the underlying platform thread?
    Thanks.

  • @royzor7965
    @royzor7965 9 месяцев назад

    Awesome video, thank you very much 😊

  • @srivatsvasu
    @srivatsvasu Год назад +3

    wonderful presentation jose. cant wait to start using this. Why are we not supposed to call an IO operation or say a rest api calls in parallel streams? is there any reasons?

    • @JosePaumard
      @JosePaumard Год назад +2

      Thank you!
      I/O operations in intermediate or terminal methods of streams: it's probably not working as you think. Same for parallel streams, you don't have any hand on how your data will be split, and to which point. So it gives a pretty unpredictable way of computing things.
      Pulling data from an I/O source: that's ok, this is what reader.lines() is doint. Don't do it in parallel though, it's useless.

  • @cinlung
    @cinlung Год назад

    Your coffee makes me wants to make a cup of coffee :)

  • @duquedehazard
    @duquedehazard 3 месяца назад

    great explanations! thanks

  • @ievgen.official
    @ievgen.official 6 месяцев назад

    Thanks. Great explanation of main topic plus extra tips. My ears satisfied when I've heard about IO in parallel computation.
    You said that stack is copied into the heap space. Stack is stored in RAM in stack memory. To me Java can simply keep all stacks in place, and switch between them by overriding a pointer to current stack in OS thread.
    Does it really need to be copied?

  • @kartal_03
    @kartal_03 5 месяцев назад

    Great solution for i/o ops.

  • @botondvasvari5758
    @botondvasvari5758 8 месяцев назад +1

    why dont you introduce async await instead completedfuture mess ? :D

  • @abdoub1656
    @abdoub1656 Год назад

    fisrt time i see you , i use to read "java le soir " blog articles !

  • @russellskalden8064
    @russellskalden8064 Год назад +2

    Very nice new feature! Thanks. Is there some chance to see in Java mechanism like in C# async/await?

    • @Iulefaitdesvidos
      @Iulefaitdesvidos Год назад +9

      No, virtual threads were created not to have the async await pattern.
      It solves this bad pattern in languages, where there are async methods and others not, because when you start to have a method with async it contaminates the others. Like when you use reactive patterns with Flux, RxJava, CompletableFuture..

  • @joelfankam3719
    @joelfankam3719 Год назад

    thx for this introduction

  • @wanlizhang6584
    @wanlizhang6584 11 месяцев назад

    Thanks your great talk!
    so... should we worry about the platform threads are enough, how can we observe it, eg: queue size, active thread number...

  • @alyxgurr755
    @alyxgurr755 Год назад

    Coffee cup, that's just classy

  • @2k5325i
    @2k5325i Год назад +3

    Clarifying question: 28:43, is this saying IO inside parallelStreams is/was always a bad idea… or is the point that it’s only a bad idea *now that Virtual Threads exist*?

    • @adambickford8720
      @adambickford8720 Год назад +1

      Always been a bad idea. Remember, its using a thread *somehwhere* its just doing the bookkeeping for you. By default, you'll share the same thread pool w/all parallel streams in your app. That means you could starve the pool intended for CPU bound tasks (like `sum()`) while its waiting for IO

    • @2k5325i
      @2k5325i Год назад +2

      @@adambickford8720 that makes sense. Just so I’m clear, for those at or below Java 17, is the recommended alternative to use a separate, dedicated thread pool for scheduling and orchestrating blocking IO?

    • @adambickford8720
      @adambickford8720 Год назад +2

      ​@@2k5325i Exactly right. Its also perfectly fine to block those I/O threads as that's the intent and it won't 'starve' other threads. It normal to have far more I/O threads than cores. Just remember each thread takes memory and overhead to manage, even if idle.
      If you're CPU bound, more threads than cores makes things worse, not better, virtual or not.
      Remember that you'll potentially want to pool connections too and now you have to multiplex threads to connections.
      It never ends :)

  • @gerdsfargen6687
    @gerdsfargen6687 Год назад

    Merci Beucoup

  • @arielpapuga8908
    @arielpapuga8908 Год назад +2

    Is it true that virtual threads (called green threads) were already present in java 1.1 but then abandoned in 1.3 as too limiting? Could you please elaborate on what was consider the limitation then and how these limitations are overcome with this new implementation?

    • @JosePaumard
      @JosePaumard Год назад +1

      Green threads were indeed an attempt at doing the same kind of things. But they were not working in the same way. One of the major difference was that a green thread was actually bound to a single platform thread, and could not jump from one another. There were other caveats, and in the end green threads were removed from the platform.
      Virtual threads are a totally new feature, with the same ideas in mind, but implemented in a complete new way.

  • @reapi_com
    @reapi_com 10 месяцев назад

    Best ever.

  • @soliveirajr
    @soliveirajr 11 месяцев назад +1

    How virtual threads are better than non-blocking I/O (Java NIO) created 20 years ago and extensively used today?

    • @abyssalwitch-b3h
      @abyssalwitch-b3h 3 месяца назад

      nio requires so mich code change it mightnt worth it

  • @yilativs
    @yilativs Год назад

    good explanation

  • @vVvvVVvvv373
    @vVvvVVvvv373 Год назад +2

    Does In-memory computation mean a task for CPU bound job? If so, computing some tasks with virtual thread isn't good cuz virtual thread has more overhead than planform thead. (of course virtual thread is way much better when it comes to blocking). Do I get right?

    • @JosePaumard
      @JosePaumard Год назад +1

      Yes. Virtual threads are only interesting if your task blocks.

  • @peace336-n8g
    @peace336-n8g Год назад

    One stupid question may be, What a raw implementation of creating a platform/kernel thread would like? If I want to create a platform/kernel thread without depending on Thread class how can i do it? Just curious to know if it is documented somewhere to read internals.

  • @joecaruso3756
    @joecaruso3756 Год назад

    Great video thank you

  • @daniellofquist9994
    @daniellofquist9994 Месяц назад

    Virtual threads are great, but all I wanna know is where I can get a coffee cup like that?

  • @mwigojonathanmark1683
    @mwigojonathanmark1683 Год назад

    Clean code, makes wonder what I have always been writing 😢

  • @mohcinebaadi6892
    @mohcinebaadi6892 Месяц назад +1

    Great content, but the background music is just so annoying!

  • @nejathakan5521
    @nejathakan5521 Год назад +2

    Read my earlier post please and please help me to answer following question:"Why does Java sais that it invented something called virtual threads, when it was invented many years ago for C? How can something that is allready invented be invented again?"

    • @JosePaumard
      @JosePaumard Год назад +1

      Sorry but I don't think Java ever said that it invented Virtual Threads. Where did you saw that?

    • @nejathakan5521
      @nejathakan5521 Год назад +1

      @@JosePaumard Sorry for my not correctly using the english language. I am not used to it 100%. I try my best. You are right that Java can't speak :-))) What I meant was the project and or company of course. I repeated looking the video again. It is said that JDK introduced Virtual Threads. So this does not mean that they invented it. So you are right virtual threads are not an invention of Java (project/company). Thank for helping to clearify this point. In short:"Virtual threads were not invented by JAVA (project/company.) Best regards.

    • @JosePaumard
      @JosePaumard Год назад +4

      @@nejathakan5521 We agree: Java can't speak :-))) Best!

  • @JijilKakkadathu03
    @JijilKakkadathu03 8 месяцев назад

    Wow!

  • @vuongbui4433
    @vuongbui4433 10 месяцев назад

    If my project is using java8 and upgrade to java21, will my old blocking code run in a virtual thread be pinned back to the platform thread? (old code includes old libraries like JDBC, GRPC, REST CLIENT)

  • @geneb.4301
    @geneb.4301 Год назад +4

    I've been working with Reactor for three years now, and while Reactor is an excellent framework, the price to pay for creating and maintaining asynchronous software is huge. This change comes not a moment too soon.

    • @floradreamweaver3646
      @floradreamweaver3646 Год назад +1

      tickering reactor is a lot of fun, but not so much when comes to production and teamwork. The virtual thread makes reactor useless to me the moment I found it.

  • @LostLuma
    @LostLuma Год назад +2

    The captions on this seem to be for a different video, kinda confusing 😶

    • @JosePaumard
      @JosePaumard Год назад +3

      Thank you for reporting it! It should be fixed now.

  • @hareepjoshi
    @hareepjoshi 5 месяцев назад

    where can i get that java cup, please?

  • @csm2526
    @csm2526 Год назад

    ForkJoinTask and ForkJoinPool is tgere to do light weight concurrent Thread execution but why Virtual Threads again?

  • @AbhishekKumar-xr1ss
    @AbhishekKumar-xr1ss 7 месяцев назад

    can anyone explain what does "that would include the probable context switching that you will have to pay" mean at 28:12 ?

  • @Gaiwwie
    @Gaiwwie Год назад

    frontend with java.. why not?

  • @--Nath--
    @--Nath-- Год назад

    Hrm.. so would reactive mechanisms need to bother with all that they do? Or just use these for the blocking stuff?

    • @JosePaumard
      @JosePaumard Год назад +2

      Use them for the blocking stuff. And ask yourself: do you need to write your code in an async way. Maybe you don't.

    • @--Nath--
      @--Nath-- Год назад +3

      @JosePaumard yeah, it does seem like these frameworks do a lot of complicated stuff to decouple concurrent tasks from threads to try deal with blocking stuff, which is what virtual threads do.

    • @JosePaumard
      @JosePaumard Год назад +2

      @@--Nath-- Exactly.

  • @alexparker7791
    @alexparker7791 Год назад

    how do you launch 2 or more io ops in parallel and wait for both like when parts of your data flow fan out and fan in

    • @JosePaumard
      @JosePaumard Год назад +1

      That's the job of structured concurrency. It is still in preview in 21, reason why I chose not to cover it here.
      You can watch how it is working on this channel: ruclips.net/video/2nOj8MKHvmw/видео.html

  • @failing_gracefully
    @failing_gracefully Год назад +1

    Measure. Don't guess.

  • @sadiulhakim7814
    @sadiulhakim7814 5 месяцев назад

    12:49 In this mess how can i check that?

  • @FurkanAliUnal
    @FurkanAliUnal Год назад +3

    Can I have a cup of ur coffee sorry I am too excited about features

  • @sadiulhakim7814
    @sadiulhakim7814 5 месяцев назад

    You had been drinking that tea for 33 mins. Wasn't that cold?

  • @nordeenhasan6030
    @nordeenhasan6030 Год назад +1

    but this feature isnot new. it was produce in
    java 19

    • @JosePaumard
      @JosePaumard Год назад

      Yes. The new thing is that it is now a final feature. And there were some updates too.

  • @viswanathankalyanasundaram9315
    @viswanathankalyanasundaram9315 6 месяцев назад +1

    Thank you .. but could you please please please mute the background music as it is distracting and irritating. The music is unnecessary for this type of content. Content itself is great but the music makes it feel like when you are studying for an exam and you hear blast of TV noise coming from the other room.Thanks again

    • @motionattached
      @motionattached 5 месяцев назад

      Maybe low the volume little bit or some other types of music.

  • @pavnn2347
    @pavnn2347 7 месяцев назад

    content is too good, however the piano background music is driving me crazy. Anyway thanks Jose

  • @VuLinhAssassin
    @VuLinhAssassin Год назад +1

    How many cups of coffee have you been drinking, sir?

    • @JosePaumard
      @JosePaumard Год назад +1

      One. Just one, really 😄

    • @VuLinhAssassin
      @VuLinhAssassin Год назад +1

      @@JosePaumard Your presentations are amazing, sir. Keep up the good work 👍

    • @JosePaumard
      @JosePaumard Год назад

      @@VuLinhAssassinThank you!

  • @pawsdev
    @pawsdev Год назад

    Is any guess when Oracle will make normal modern docs site like Kotlin, JS,Python has? JavaDocs is ugly

  • @cccc2740
    @cccc2740 Год назад +1

    subtitles are totally unrelated...🤣🤣

    • @JosePaumard
      @JosePaumard Год назад +5

      I just fixed them. Sorry for the inconvenience.

  • @iaintoft7003
    @iaintoft7003 Год назад

    would have been nice to have a video without the music 😅

  • @michelvandermeiren8661
    @michelvandermeiren8661 Год назад +1

    Performance vs classical threads is so disappointing. There is nearly no diff

    • @JosePaumard
      @JosePaumard Год назад

      There is no reason that your code run faster on virtual threads. In the end, it is a platform thread that executes your virtual thread. What you should run in a virtual thread is I/O operations. Then you will get better performances, because blocking is handled in a much better way than asynchronous code.