Nice video! Although one critical difference between Latches and Barriers are Barriers are used to wait on Threads i.e number specified on Barrier should be called from that many Threads while Latches are used to wait on events, i.e even the same Thread can call the countDown multiple times.
Thanks Deepak sir, the way you do the visualisation of the thread is amazing, it really helps us to understand in a better way. Thanks a lot for the wonderful tutorial.
absolutely this is the best video for java concurrency,but there are many new terms coming up suddenly, so this one is still pretty hard to me, maybe in the future i will come back and watch again,hope i can get a better understanding
Defog Tech hi mate, I have another question here about the Future and callable interface, say that I submit a task to the thread in the thread pool, then do other operations, and then I call future.get() if the thread finished execution, it will not block the main thread, but it will block the main thread if the thread in the pool doesn’t finish the task yet, so it is blocking the process
I liked all the concurrency videos made by you. You explain these complex topics so simply. But it would have been really helpful if you have code along instead of using code snippets. It would help us to understand better
9:47 What if the Main Thread reaches _phaser.arriveAndAwaitAdvance()_ before the Child Thread has even started? Isn't _phaser.register()_ supposed to be in the Main Thread and _phaser.arrive()_ in the Child thread?
I am trying to build a class which constructor takes ListtaskList and this class executes tasks by using ExecutorService and LatchCountDown. Resposibilty of this class to executes task and decrement latch count. After end go back to the client.
Your videos are really TOP of the TOP. Maybe you could record something about practical applications of using Phaser. I still could not deduce from the video what would be a practical use of Phaser. I understand that it can be used as a substitution for Latch and Barrier but that is most probably not the main purpose. Also, do you have maybe a github source code for your videos?
If we initialize phaser with 1. And then we register a thread separately - does that mean await advance count is 2 now? And it's deadlock! So, we shud either initialize or register and shud not do both! Hope I am saying right..
1. What happens if latch reaches 0 but still latch.countdown() is called. 2. What happens when out of 3 threads 2 threads reaches barrier and barrier.reset() is performed.
Very good and simple explanation, great job. I found some problem when I try to run phaser (as CountDownLatch) program , I notice it do not give exact output as CountDownLatch program, but when I change phaser.awaitAdvance(1); to phaser.awaitAdvance(0); then it work exactly as CountDownLatch. Will you Please explain it ? thanks in advance
I just executed the example(phaser acting as a countdownlatch) and tried to verify your explanation.But it seems i got different result.Just wanted to ask have you verified that example ?
API names are worded differently but they are very similar to Promise API and supported methods like Promise.all() and Promise.allSettled(), if I am not wrong.
Thanks much! appreciate your kindness. I am planning to start (paid) UA-cam memberships on the channel soon with exclusive content. Hopefully with enough support, I can do this full time.
I have never come across any situation wherein only CyclicBarrier can be used as I was able to achieve the same thing with CounDownLatch.Can you give any usecase apart from player example wherein CyclicBarrier was best fit?
Hi Manoj...I had an interview question on this.?Check here? stackoverflow.com/questions/54609585/how-to-stop-all-threads-if-anyone-fails-in-java/54609899#54609899
@@nokia1727 We can achieve the same thing with CountDownLatch as well.. create a main thread which will span all other threads and wait for all threads to complete..if all threads have completed (no exception) then commit the transaction in main thread otherwise cancel rest of the threads and rollback the transaction .
Nice video Deepak.Where should I use CountDownLatch?In most of the cases I use Callable and call get() which is a blocking operation then why I need CountDownLatch to let the main thread as same thing I can achieve using get call..please throw some light on this.
one example of count-down-latch is (before spring days), if you have a class which is waiting for other classes to initialize... (eg: UserService, RateService etc. which may get things from database and take time to initialize)..main class would do count-down-latch.await() and other classes would do count-down-latch.countdown() when they were ready. Here the executor service and callables donot help
Hi Defog, recently I've encountered this following question in one of the interview I faced and I was not able to answer it. Please Make a vide or let me know how it can be achieved. Q. How can you start Multiple threads(ex 10 threads) at the same time(exactly same time) int Java. Thanks in advance
Do you mean, start 10 tasks on 10 different threads at the same time? It purely depends on CPU scheduling which is not under control of Java but of Kernel thus its not possible to do that.
ok, even thats not possible. If we use single thread to start 10 threads, then it will start them sequentially. Even if you have 10 existing threads start 1 thread each it will depend on if those 10 threads work simulatenously on 10 CPU cores. Maybe with CPU Core Affinity we can ensure that. And then have a timer(absolute, not relative) in those threads to start a new thread. Btw, also note that start() of the Thread only puts thread on runnable queue it doesnt instantly schedule it on CPU Sorry to say this, but I suspect the interviewer who asked the question also doesnt know enough about threading
Its nothing special. I love to read and understand complex topics. Reading good sources help (for Java I read Concurrency in Practice book, JEP articles, OpenJDK dev discussions etc.). For system design, the CS papers are typically excellent (Google, Meta, AWS, USENIX, SIGMOD, etc). - mail.openjdk.org/mailman/listinfo - openjdk.org/projects/jdk/17/jeps-since-jdk-11 - jcip.net/
After watching all of your concurrency videos, my programmer brain has fundamentally changed. I am ready to use all the cores. Thank you.
These videos on java concurrency are amazing. Keep them coming
Super video! I applauded for ₹100.00 👏👏
Nice video! Although one critical difference between Latches and Barriers are Barriers are used to wait on Threads i.e number specified on Barrier should be called from that many Threads while Latches are used to wait on events, i.e even the same Thread can call the countDown multiple times.
Very good catch...
This is the best version of Java concurrency tutorial till date. Defog tech it is time to update the playlist with virtual thread.
Thanks Deepak sir, the way you do the visualisation of the thread is amazing, it really helps us to understand in a better way. Thanks a lot for the wonderful tutorial.
Thanks much for the appreciation Ashish!
The visual representation is superb...clears concepts faster than just reading stuff
absolutely this is the best video for java concurrency,but there are many new terms coming up suddenly, so this one is still pretty hard to me, maybe in the future i will come back and watch again,hope i can get a better understanding
Thanks! To be honest, Phaser class is rarely used. Understanding CountDownLatch should be enough for most use-cases.
Defog Tech Thx mate, to be honest, I only understand CountDownLatch
Defog Tech hi mate, I have another question here about the Future and callable interface, say that I submit a task to the thread in the thread pool, then do other operations, and then I call future.get() if the thread finished execution, it will not block the main thread, but it will block the main thread if the thread in the pool doesn’t finish the task yet, so it is blocking the process
Great work brother 👍😁
so beautifully explained!!!
subscribed right away!
Very nice explanation with graphics, accurate speed and perfect voice tempo.... really liked it !!!
I listen at 1.75 speed, but yea, this guy has the best Java concurrency content on UA-cam.
You made our life quite easy to understand the concurrency in Java. Really your videos are amazing for me and most useful than books .
Thank you for your kind words sir!
Thanks Deepak Sir, never stop making these videos
I liked all the concurrency videos made by you. You explain these complex topics so simply. But it would have been really helpful if you have code along instead of using code snippets. It would help us to understand better
Thanks for your all the thread videos . I got cleared my concepts
Thanks for this nice Video which is made to easy understand the concept.
Excellent videos. Blown away by the explanation..
9:47 What if the Main Thread reaches _phaser.arriveAndAwaitAdvance()_ before the Child Thread has even started? Isn't _phaser.register()_ supposed to be in the Main Thread and _phaser.arrive()_ in the Child thread?
Nice explaination . Thank you 👍
I am trying to build a class which constructor takes ListtaskList and this class executes tasks by using ExecutorService and LatchCountDown. Resposibilty of this class to executes task and decrement latch count. After end go back to
the client.
Thank you so much for making such awesome videos!
Very nice and simple examples. Thanks!
Great explanation. Thank you.
Superb explanation! You’ve saved 3 hrs of my life !
Phaser: 04:55
Great explanation, thank you!
Best explanation ever!!!
Could you please clarify a bit more why is it needed to put the main thread into sleep mode when using the CyclicBareer or the Phaser as barrier?
Your videos are really TOP of the TOP. Maybe you could record something about practical applications of using Phaser. I still could not deduce from the video what would be a practical use of Phaser. I understand that it can be used as a substitution for Latch and Barrier but that is most probably not the main purpose. Also, do you have maybe a github source code for your videos?
If we initialize phaser with 1. And then we register a thread separately - does that mean await advance count is 2 now? And it's deadlock! So, we shud either initialize or register and shud not do both! Hope I am saying right..
1. What happens if latch reaches 0 but still latch.countdown() is called.
2. What happens when out of 3 threads 2 threads reaches barrier and barrier.reset() is performed.
Small request to add tiering of phasers and where that might be Needed
Can you create a tree and graph video series too? It would be very helpful
Thanks!! Subscribed
Amazing videos . Very very helpful .
Please make more videos for collection , lambdas and other new features. Thanks
Thank you sir! Will try to make videos for those topics
Very nicely explained. Thanks !!
You're very welcome :)
Very good and simple explanation, great job.
I found some problem when I try to run phaser (as CountDownLatch) program , I notice it do not give exact output as CountDownLatch program, but when I change phaser.awaitAdvance(1); to phaser.awaitAdvance(0); then it work exactly as CountDownLatch. Will you Please explain it ?
thanks in advance
I just executed the example(phaser acting as a countdownlatch) and tried to verify your explanation.But it seems i got different result.Just wanted to ask have you verified that example ?
yes same for me !
You are just superb.
Can it happen that by the time a party register itself it's already phase 2 or 3 or so.
Amazing weapons! hats off:)
Your 1st phaser example should have phaser.awaitAdvance(0) else it will not wait and return immediately.
Thanks!
Correct! Even I was thinking why my program is not giving expected result. phaser.awaitAdvance(0) did the trick.
Really awesome videos!! Thx a lot!
You're most welcome!
Nice explanation. Keep it up bro 👍🏻
Superb..Thanks
API names are worded differently but they are very similar to Promise API and supported methods like Promise.all() and Promise.allSettled(), if I am not wrong.
Simply Amazing
Your videos are great, everything down to your channel name is good quality :)
would like to donate but even google couldn't find that option anywhere
Thanks much! appreciate your kindness. I am planning to start (paid) UA-cam memberships on the channel soon with exclusive content. Hopefully with enough support, I can do this full time.
"Hopefully with enough support, I can do this full time."
that sounds beautiful, I hope that for you too.
Great explanation!
I have never come across any situation wherein only CyclicBarrier can be used as I was able to achieve the same thing with CounDownLatch.Can you give any usecase apart from player example wherein CyclicBarrier was best fit?
Hi Manoj...I had an interview question on this.?Check here? stackoverflow.com/questions/54609585/how-to-stop-all-threads-if-anyone-fails-in-java/54609899#54609899
@@nokia1727 We can achieve the same thing with CountDownLatch as well.. create a main thread which will span all other threads and wait for all threads to complete..if all threads have completed (no exception) then commit the transaction in main thread otherwise cancel rest of the threads and rollback the transaction .
Nice video Deepak.Where should I use CountDownLatch?In most of the cases I use Callable and call get() which is a blocking operation then why I need CountDownLatch to let the main thread as same thing I can achieve using get call..please throw some light on this.
one example of count-down-latch is (before spring days), if you have a class which is waiting for other classes to initialize... (eg: UserService, RateService etc. which may get things from database and take time to initialize)..main class would do count-down-latch.await() and other classes would do count-down-latch.countdown() when they were ready.
Here the executor service and callables donot help
Hey nice video, there is issue with the code for countDownLatch, you need to have synchronized(latch){latch.wait()} otherwise you will get exception.
Don't think so, countdown latch doesnt need extra synchronisation
Hi Defog, recently I've encountered this following question in one of the interview I faced and I was not able to answer it. Please Make a vide or let me know how it can be achieved.
Q. How can you start Multiple threads(ex 10 threads) at the same time(exactly same time) int Java.
Thanks in advance
Do you mean, start 10 tasks on 10 different threads at the same time? It purely depends on CPU scheduling which is not under control of Java but of Kernel thus its not possible to do that.
@@DefogTech start 10 individual threads.
ok, even thats not possible. If we use single thread to start 10 threads, then it will start them sequentially. Even if you have 10 existing threads start 1 thread each it will depend on if those 10 threads work simulatenously on 10 CPU cores. Maybe with CPU Core Affinity we can ensure that. And then have a timer(absolute, not relative) in those threads to start a new thread.
Btw, also note that start() of the Thread only puts thread on runnable queue it doesnt instantly schedule it on CPU
Sorry to say this, but I suspect the interviewer who asked the question also doesnt know enough about threading
Good work, please keep doing your knowledge sharing
Thank you sir! Hopefully will keep adding more at a steady pace.
cant thank u enough
Really helpful Thanks a lot Can you please make video on Thread Dump
What is your approach to learn any topic in depth ?
Its nothing special. I love to read and understand complex topics. Reading good sources help (for Java I read Concurrency in Practice book, JEP articles, OpenJDK dev discussions etc.). For system design, the CS papers are typically excellent (Google, Meta, AWS, USENIX, SIGMOD, etc).
- mail.openjdk.org/mailman/listinfo
- openjdk.org/projects/jdk/17/jeps-since-jdk-11
- jcip.net/
Please show working example .. it will be helps more
god of concurrency
Phaser is still confusing for .me..
🙏💯👍