Introduction to CompletableFuture in Java 8

Поділитися
Вставка
  • Опубліковано 13 жов 2024

КОМЕНТАРІ • 339

  • @BairagiBiker
    @BairagiBiker 4 роки тому +134

    I haven't seen any other tutorial that has described this with such simplicity and beauty!! Really great work man!

  • @prashantjha439
    @prashantjha439 3 роки тому +7

    Trust me this channel is best for industry people.....the sad part is we do not get to see any more videos from this channel.......i would request the creator to at-least think for a membership based subscription

  • @balakrishnajangita6638
    @balakrishnajangita6638 5 років тому +73

    I don't have words to describe you boss awsome bro

  • @heshamosman9752
    @heshamosman9752 4 роки тому +9

    Whenever I want to remember something about java concurrency, I go and watch your videos, Great job

  • @Javavidz
    @Javavidz Рік тому +4

    I have read lot of books and watched so many videos on multi threading, no one explained in this manner. Great work. Thanks for the content.

  • @kunalrai7577
    @kunalrai7577 3 роки тому +19

    Your explanations are truly amazing and crystal clear, hats off and thanks a lot for such a great content.

  • @mostinho7
    @mostinho7 4 роки тому +6

    DONE thanks
    1:17 callable is used when you want to return a value from a thread (normal thread doesn’t return anything)
    Implementing call method that returns ReturnType
    Callable returns a Future that is a placeholder for the real value.
    Doing future.get() is blocking if the task is not completed
    2:50 visualization
    We can chain methods together (instead of blocking with get() we say thenApply(...) and chain calls asynchronously
    See chaining from 5:59
    12:50 can perform the chained asynchronous operations on the same thread or provide a different thread pool (executor service) for each operation (some operations might be cpu intensive some io, so we want to use different threadpool)
    17:00 we don’t have to specify an executor to completable future, it uses forkjoinpool internally
    Todo continue from 1:17

  • @sekharsamanta6266
    @sekharsamanta6266 6 місяців тому +1

    The most practical video I've ever seen on CompletableFuture

  • @pankajgupta4740
    @pankajgupta4740 4 роки тому +8

    Terse, succinct, precise, informative, amazing, clear, .... running out of words to describe. Thank you so much for the video series

  • @vishall3379
    @vishall3379 4 роки тому +5

    Hi Deepak, Your doing a excellent job of covering the most complex topic of Java threads & concurrency on your channel by providing detailed insight & explanation on each feature in simple and clear manner with hands on code. Keep it up.👍

  • @solorankerone
    @solorankerone 2 роки тому +1

    came back it to again after few years. still blows my mind how simply OP has explained the concepts.

  • @manishmanghwani731
    @manishmanghwani731 3 роки тому +3

    The way you explain complex things in simple flow with sharp voice makes it impossible to take break from learning :) Great work Sir!

  • @drakezen
    @drakezen 6 років тому +25

    Would be great if you had a series on reactive programming. Good complement to your discussion on completablefutures

    • @TheHarpanOnly
      @TheHarpanOnly 4 роки тому +2

      I do agree. You have very good approach in teaching other.

    • @surajsingh-vu5oc
      @surajsingh-vu5oc 3 роки тому +2

      Please make video on reactive programming

  • @ndk8111
    @ndk8111 Рік тому +1

    Thank you for the session. A few questions please:
    ONE - what if instead of creating a loop of 1:100 (i) you fetched 100 product ids, how would you revise your code to process 100 orders in parallel?
    TWO : what if you needed a receipt at the end of each order processing (success or failure) , how would you aggregate results of each thread without blocking and print the final 100 line status receipt from main thread?

  • @gkcs
    @gkcs 4 роки тому +45

    10:47 I got unsettled watching those lambdas not being converted to method references :P
    Thanks for the great video Deepak!

    • @B-Billy
      @B-Billy 4 роки тому

      @Gourav are you a java developer? :)

    • @upeshsai2804
      @upeshsai2804 4 роки тому +10

      Wow it's soo good to see you here Gaurav !
      It's like when both of my gurus meet :D

    • @marlonemoreira3460
      @marlonemoreira3460 3 роки тому

      Ra

    • @ms_thesingh7894
      @ms_thesingh7894 3 роки тому +1

      By voice it looks like Gaurav and Deepak are same :-)

    • @chetanmishra7009
      @chetanmishra7009 3 роки тому +1

      @@ms_thesingh7894 gangadhar(#guru_ji) hi shaktimaan hai

  • @sushmithashenoy7581
    @sushmithashenoy7581 2 місяці тому

    Beautifully explained. You make everything very simple yet covering all thats relevant to the context. Please keep up the good work that benefits millions like us.

  • @aryansharma6725
    @aryansharma6725 Рік тому +1

    Such great understanding, I have become a fan. How did you learnt about all these ,you prefer documentation or books or videos? Knowing the answer to this will help me hit the foundational part missing in my learning.
    Great video though.

  • @krishandeo4070
    @krishandeo4070 3 роки тому +3

    Hello sir, I am big fan of your teaching skill. You explain tough topics in very easy way. I request you to please make some tutorials on RxJava. Thank you so much for all your effort.

  • @vivekpurushothaman8
    @vivekpurushothaman8 5 років тому +5

    Brilliant video. A lot of my confusions got resolved through this video. I will subscribe to you because I find learning with you very enriching. Please keep creating more videos like this :)
    Also for completablefuture if you can include collecting multiple futures through .get .all etc... It'll be complete

  • @MakeItStik
    @MakeItStik 4 роки тому +3

    Another beautiful and clearly explained video :) Haven't seen any new videos from you :( Please continue making such videos, it really helps.

  • @MukeshShah-lj4th
    @MukeshShah-lj4th Рік тому +1

    Sir your explaination is awesome. I haven't see this type of deep explaination from other tutorials

  • @gersonadr2
    @gersonadr2 Рік тому +2

    Finally I understood! Thank you!!

  • @AbhijeetMuneshwar
    @AbhijeetMuneshwar 2 місяці тому

    This is 1 video which explained me Future vs Callable Future clearly out of many other videos

  • @asashish905
    @asashish905 2 роки тому +1

    Whenever I think of concurrency, I know which YT channel to look up. 🙂❤

  • @dhaanaanjaay
    @dhaanaanjaay 2 місяці тому +1

    why this channel stopped. This is the best source for concurrency topics.

  • @bandisruthi6877
    @bandisruthi6877 3 роки тому +1

    Really nice 👌.. I have never seen this type of videos related to concurrent package...Awesome explanation with simple examples ...tq so much....

  • @AbhijeetMuneshwar
    @AbhijeetMuneshwar 2 місяці тому

    This video has shown me true power of CompletableFuture

  • @GirishBapatpune
    @GirishBapatpune 4 роки тому +4

    Amazing work! Thanks a lot for such a wonderful video. I went through 4, 5 videos from your channel. You have excellent command over teaching in all aspects: mentioning problem statement, explaining with diagram, providing solution and need of each line why it's been used with available relevant alternatives, pros and cons. On top of this your speed and tone is perfect for learner. Superb audio, video, presentation quality as well. Thanks a ton! God bless you.

  • @ismile47
    @ismile47 7 днів тому

    Hi Sir,
    Your videos are more informative and upto the point. I am not sure why now days there no new videos or topic not getting upload. Please continue with atleast 6months 1 topic

  • @muna6403
    @muna6403 4 роки тому

    I tried to write some good comment for your video session but I can't have word to write.... you are simply very very amazing Sir.... clear all doubt..... never seen this please keep on posting video session.....we are excited to see your new upcoming video session....

  • @davesachin1048
    @davesachin1048 Рік тому +1

    Thanks.. you really made this complex thing easy!!!

  • @hyperborean72
    @hyperborean72 4 роки тому +3

    Hello, thank you for the great tutorial.
    Did I understand right that in your example of single order processing the tasks submitted to ExecutorService are blocking to each other though each one is performed in a separate thread?
    if I'm correct I was wondering why did you use ExecutorService for single order processing if single order processing is sequential by its nature.
    And the problem is how to fire several separate order processings - not to separate different steps of the same order processing?

  • @ntonZZ
    @ntonZZ 5 років тому +1

    Dude, where were you all this time? videos are precise, exact and crisp.

  • @shivaliraina3038
    @shivaliraina3038 3 роки тому +1

    i can't think of a better explanation than this . Amazingly explained. thank you

  • @KundanRoy
    @KundanRoy 5 років тому +1

    You are awesome man.. i just can't explain how much you helping people to understand deep concepts in easy way. I request you to make series of RxJava ..

  • @DurgaShiva7574
    @DurgaShiva7574 Рік тому +1

    salute you from heart.. no words i have !

  • @sivaramakrishnakv
    @sivaramakrishnakv 3 роки тому +1

    Very composed and clear explanation with practical examples. Great work!!

  • @pinxtr
    @pinxtr 2 роки тому

    This is the second video I watched from your channel and you straight away became one of the best Java youtube channels I'll follow and recommend others to follow as well. Thanks a lot for this super easy explanation!

    • @DefogTech
      @DefogTech  2 роки тому

      Thank you for the kind words Priyank!

  • @lings628
    @lings628 4 роки тому +1

    Fantastic job man! God bless you. Please do a video on RxJava. Nobody will be able to explain it like you do.

  • @danielgyrtes6370
    @danielgyrtes6370 4 роки тому

    Watch it twice guys, after second time everything is clear. Thanks for the video!

  • @PujaSingh-qg5ln
    @PujaSingh-qg5ln 2 роки тому

    Very nicely explained. Finally got clear on the concept of CompletableFuture. Thanks for this video.

  • @cseshivaprasad1985
    @cseshivaprasad1985 6 років тому +4

    Wonderful explanation with right example. I was always struggling to apply this pattern for my processes, this gives lot of clarity. Is it a simplified version of Saga pattern ?

  • @shwetapriyadarshani197
    @shwetapriyadarshani197 Рік тому +2

    Too concise and crisp 👍

  • @biswaranjan84
    @biswaranjan84 5 років тому +3

    Best Explanation ever which i find. Just one question in my mind - Can the same functionality be achieved by CompletionService as well ?

  • @virendrakhade12
    @virendrakhade12 6 років тому +16

    Very nice explanation, thanks a lot

  • @vijaykumarreddyt3287
    @vijaykumarreddyt3287 Рік тому +1

    You are doing Great service, Dude

  • @karanvatwani9077
    @karanvatwani9077 3 роки тому +1

    Very well explained. One doubt i have, suppose if we have one executor service and we have Future.submit(task) which is performing some DB fetch or list operation and when we do future.get() with timeout overloaded method so it is blocking the thread and giving Timeout Exception. We are passing 120 sec time out limit in get() method. So how does CompletebaleFuture.suuplyAsync() and CompletableFuture.complete() will help us here?

  • @rajeshg3570
    @rajeshg3570 2 роки тому +1

    Beautiful explanation on this concept. I've a question here - Do we have any specific advantage if we use two thread pools instead of one? I mean to ask what are the practical scenarios to use more than one thread pool ?

  • @ramt179
    @ramt179 2 роки тому

    Crystal clear. You are really have the knack of teaching

  • @gargsuraj12
    @gargsuraj12 3 місяці тому

    Have to say, very well explained. Keep creating the good work.💪

  • @woshinidayeeee
    @woshinidayeeee 3 роки тому

    The thread pool and tasks graph is really nice.

  • @Namrata766
    @Namrata766 2 роки тому

    Really simple and informative. Thanks for this video. I got to know all that I needed to know about CompletableFuture from here.

  • @manomitmitra6903
    @manomitmitra6903 2 роки тому

    Beautiful. "Possibly Asynchronous", I have never heard anyone said that. 👍

  • @praveensisodia8055
    @praveensisodia8055 3 роки тому

    Absolutely brilliant !! I have seen many videos on completableFuture , but this was the best one. what clarity man. Brilliant !!

  • @anandashekhar9908
    @anandashekhar9908 Рік тому +1

    Do you have any video tutorial about reactive framework in Java please (Extension RX Java)? If yes please kindly share the link.

  • @karankanojiya7672
    @karankanojiya7672 2 роки тому

    Teaching is an art and you have mastered it .
    Respect ++ Sir !

  • @alpavaidya412
    @alpavaidya412 4 роки тому

    I could listen to your explanations all day...u make it so easy to understand...u deserve many more subscribers

    • @DefogTech
      @DefogTech  4 роки тому

      Thank you so much for the kind words!

  • @asankasiriwardena3383
    @asankasiriwardena3383 Рік тому +1

    Wow superb explanation ..!

  • @pbgkhy
    @pbgkhy Рік тому +1

    Superb explanation

  • @jsaimanohar
    @jsaimanohar Рік тому +1

    Really great work man!

  • @RahulKumar-j9y6p
    @RahulKumar-j9y6p Рік тому +1

    liked the detailing

  • @RaviBoyina
    @RaviBoyina Рік тому +1

    super precise and super cool..thanks to you sir.

  • @vinaypandey5599
    @vinaypandey5599 3 роки тому

    You are awesome! Please keep posting videos don't stop. No one explained threads the way you do..

  • @AshishRohillax
    @AshishRohillax Рік тому +1

    Brilliant explanation mate.❤

  • @hareeshjp
    @hareeshjp 2 роки тому

    Really really superb explanation of complex topic to understand easy.

  • @sagartyagi2450
    @sagartyagi2450 3 роки тому

    Hey, thanks for the awesome tutorial. I've one question, why do you even need CompletableFuture, why can we just create a TASK which handles all the sequential flow using futures and start multiple such tasks itself?

  • @nileshdasarwad1668
    @nileshdasarwad1668 4 роки тому

    By watching this I have become a big fan of your tutorial thanks lot ..

  • @PA-vf5st
    @PA-vf5st 3 роки тому

    Very well explained, You have long way to go....Subscribed already n waiting for other video’s....Thank You...

  • @kunalrai7577
    @kunalrai7577 3 роки тому

    Dear Sir ,
    I feel its just an another form of Function Functional Interface , where andThen is replaced by thenApply
    Above code can also be written as order.andThen(price.andThen(confirmationMessage)).apply(9);

  • @xzygis
    @xzygis 4 роки тому

    Thank you! Great and informative video! I don't understand why majority of tutorials(youtube, udemy) doesn't use diagrams or pictures when explaining it's much easier to understand and gives better understanding of all flow. But instead majority just types code and mumbles what that code does and for beginner it's hard to grasp.

  • @curriedagain
    @curriedagain Рік тому +1

    Very nice!

  • @amitsinha3944
    @amitsinha3944 3 роки тому

    Beautifully explained. Have one confusion though. Would request you to clear that. I tried below piece of code to get complete understanding.
    What i was expecting is all threads to complete except the one for which i purposefully slept thread for 5 seconds.
    for(int i=0;i"").thenAccept((o)->{
    if(val==5){
    try(){
    Thread.sleep(5000);
    }catch(InterruptedException e){
    }

    }

    System.out.println(o+"-printed-"+val)
    })
    }
    However, i saw o/p like this which caused the confusion
    amit-printed-0
    amit-printed-1
    amit-printed-2
    amit-printed-3
    amit-printed-4
    waited for 5 seconds and then printed..
    amit-printed-5
    amit-printed-6
    amit-printed-7
    amit-printed-8
    amit-printed-9
    I thought no thread will be blocked if any one cause delay.
    In order to fix that i had to provide a seperate threadpool like below
    ExecutorService executorService =Executors.newCachedThreadPool();
    CompletableFuture.supplyAsync(()->"",executorService).thenAccept((o)->{...
    Can you please clear this confusion.

  • @tristanmoller9498
    @tristanmoller9498 2 роки тому

    Best explanation I have encountered, thanks so much!

  • @murrayKorir
    @murrayKorir 2 роки тому

    Very very awesome. I now fully understand.

  • @rohannayak4979
    @rohannayak4979 4 роки тому +1

    Awesome explanation Sir. Why are there 20+ down votes....?

  • @sathishrajasekar1155
    @sathishrajasekar1155 3 роки тому

    Good Explanation on Completable Future

  • @pramodkumar-fo5sy
    @pramodkumar-fo5sy 3 роки тому

    such a amazing teacher, hats off dear!!!

  • @mayankpant5471
    @mayankpant5471 Рік тому

    who is this guy ? I have seen very few people in internet explain java topics with such simplicity and cohesion

  • @SreekarAnugu
    @SreekarAnugu 4 роки тому

    You deserve more subscribers and views. Very clear and crisp and to the point.

  • @GauravDubey-om7lr
    @GauravDubey-om7lr 11 місяців тому +1

    @15:07 creating a threadpool for every task seems like a overkill . Can we not create threadpool outside of loop it might reduce overhead of 100 threadpools

  • @HighlifeC
    @HighlifeC Рік тому +1

    I am interested to smash the like button..in a for loop 100 times in async mode :)

  • @lella2083
    @lella2083 3 місяці тому

    Even in supply async the other thenapplu operations are dependent on the previous one right ? What if the it is waiting for the value of the first one

  • @souravsuman1993
    @souravsuman1993 5 років тому +1

    Nice explanation.
    But i have a question to ask when you say at 8:15 independent flow did you mean their are multiple orders being made from different users and at that time my future code would not work? Let me know this statement of mine is correct.
    One more question when you put 10:15 completablefuture in for loop with 100 iteration does that mean their will be 100 different threads placing 100 different orders?

    • @DefogTech
      @DefogTech  5 років тому

      Good questions
      1. Yes, end to end flow of one order is completely separate from other order. This both can be run in parallel.
      2. CompletableFuture internally uses ForkJoinPool .. so even if we submit 100 orders at the same time it's up to the pool to decide and limit the number of threads created. If threads are less rest of the tasks will be stored in a queue until a thread becomes free

    • @souravsuman1993
      @souravsuman1993 5 років тому

      @@DefogTech thanks for the reply.
      so in completablefuture piece of code their won't be 100 threads placing an order, but it will all depends on the forkjoin pool. Anyway i define the pool size in forkjoinpool?

    • @DefogTech
      @DefogTech  5 років тому

      ForkJoinPool has a constructor which takes an integer (parallelism). Though generally, it will create new threads if existing ones are blocked or suspended. Also, it will not help to have too many threads if number of CPU cores you have is less.

  • @MegaSriku
    @MegaSriku 3 роки тому

    A great video that I came across to understand CompletableFuture. Keep it up man.

  • @unsaturated8482
    @unsaturated8482 Рік тому +1

    excellent.

  • @kk-pi4hj
    @kk-pi4hj 4 роки тому

    I understand the dependency issues is solved compared to regular Future but don't you still need to do completablefuture.get() after your for loop? otherwise your main thread will exit while the tasks in your completable future are still running .

  • @satyanehru6520
    @satyanehru6520 4 роки тому

    Very good explanation.But I have one question.Suppose, the getOrder does not return any value to enrichOrder, What would happen to the chain of executions.Please note it doesn't throw any exception. May be partial response from getOrder.

    • @DefogTech
      @DefogTech  4 роки тому

      Since the method does have a return type.. it will have to return something, the worst it can return is null in which case the next method will get input as null and will process based on the code

  • @omerchannel
    @omerchannel 3 роки тому

    simple, easy, to the point, really excellent

  • @mjsprasad9396
    @mjsprasad9396 4 роки тому

    It's great.
    Question:
    1) Can we execute a threads like a Cron Job?
    Ex: Suppose execute the 5 thread from main method for specific time and period.

    • @Luk3Stein
      @Luk3Stein 4 роки тому

      Check out ScheduledExecutorService

  • @myhimalayanchants
    @myhimalayanchants 5 років тому

    Excellent presentation but at the end you recommend reactive RX Java ...Can you give some examples on why completable future becomes complex to implement ? Personally I don't think this could be an issue since Java itself is vast for thread programming and Spring is very flexible .
    A combination of both can help us solve most tedious asynchronous task .

  • @HarishKumar-yh3tz
    @HarishKumar-yh3tz 2 роки тому

    Nice explanation. Very clear and the recording was also crisp

  • @dhruvgupta1993
    @dhruvgupta1993 4 роки тому +1

    You have really explained it in a proper manner and very easy way. Thank you!!

  • @mahmoudezzeldin3265
    @mahmoudezzeldin3265 4 роки тому +4

    great video. i am seeing this in December 2019,
    go a head. u have agreat future in education because u r an awesome teacher. u explain stuff like a pro

  • @SunnyKumar-ud9gp
    @SunnyKumar-ud9gp Місяць тому

    Please please continue video making😭😭..it's a GOLD

  • @kayeshparvez
    @kayeshparvez 3 роки тому

    Great video. Thanks for explaining nicely

  • @divyamahesh9032
    @divyamahesh9032 2 роки тому

    Awesome video with the perfect usecase

  • @hirenshah1816
    @hirenshah1816 3 роки тому

    Neat and beautiful... Excellent!!

  • @suhassuvvi5777
    @suhassuvvi5777 4 роки тому

    Great explaination. Also could you please explain how completable future works internally

  • @jamesteh2847
    @jamesteh2847 2 роки тому

    Great, clear explanation. Thank you!

  • @jasper5016
    @jasper5016 Рік тому +1

    Brother your content is top notch. Thanks for this. Please cover more such topics.