I'm going through this playlist to learn Java concurrency, and I have to say your explanation and presentation quality are amazing, and the diagrams are really helpful. thank you!
@DefogTech4 жыл бұрын
Wow, thanks!
@mohammedrahamathulla40403 жыл бұрын
@@DefogTech Why no videos from you😔?? All your subscribers are waiting
@monishchhadwa7779 ай бұрын
I would absolutely recommend all Java engineers-whether junior or very senior-to watch this!
@shellindebted53286 жыл бұрын
I tried multiple times myself to understand JMM, But this is the first time i got to learn something about them. Excellent Presentation. Hats of to you, You define perfection!!
@DefogTech6 жыл бұрын
I am far from perfect. Though, thanks much for the kind words sir!
@yifei6636 жыл бұрын
May be you should read java language specification : docs.oracle.com/javase/specs/jls/se8/html/jls-17.html .
@suhani0910884 жыл бұрын
Always read these topic therotically, but could never visualise it like this you have explained..Great presentation man!
@iknowyourerightbut62465 жыл бұрын
future me: volatile has semantics for memory visibility. Basically, the value of a volatile field becomes visible to all readers (other threads in particular) after a write operation completes on it. Without volatile, readers could see some non-updated value.
@rohitsharma-xt8qe5 жыл бұрын
I have never seen such an excellent explanation of JMM. Thanks a lot
@Admiral.MacDonnell10 ай бұрын
My takeaway - if the tasks perform blocking IO operation, I should not use fork join pool. so true. Thanks for the explanation! You have a gift of mixing complicated concept easy to digest!
@Dedeepya95 жыл бұрын
Started watching thread pool videos Nd then addicted to all of ur videos Nd subscribed..the way of explanation is precise , innovative Nd interesting.your wrk deserves more than a thnks..
@DefogTech5 жыл бұрын
Thank you for the kind words!! I am so happy its helping everyone
@sepraveen5 жыл бұрын
Yes are techie by heart
@NaturalPro1005 жыл бұрын
The best video i could find on youtube.
@tanoysaha74105 жыл бұрын
Your explanations are precise, but have so in-depth/hidden informations and moreover so easy to understand
@paneerdopyaaza29144 жыл бұрын
Please make a whole course...I will definitely try buying it.Your videos are just awesome.
@mostinho74 жыл бұрын
2:10 each core has its own cache and then there are shared caches. Thread running on core changes the variable in its local cache only, volatile keyword makes sure variable is flushed to shared cache when thread changes it so that changes are visible to all the other threads 6:05 happens before relationship 9:30 volatile keyword example
@monstersmiled6484 жыл бұрын
Hi can you help me I am confused when i was trying real time as per the diagram in the time 00:03:52 here i used this... System.out.println("the writerThread x is: "+x); System.out.println("the readerThread r2 is:"+r2); --------------------------------------------------------------------------------------------------------------------------------- like in this program(below): public class FieldVisibility { int x = 0; public void writerThread() { x = 1; System.out.println("the writerThread x is: "+x); } public void readerThread() { int r2 = x; System.out.println("the readerThread r2 is:"+x); } } output is:-- the writerThread x is: 1 the readerThread r2 is:1 ....................................................................................... instead of the writerThread x is: 1 the readerThread r2 is:0
@bhavyashah26306 жыл бұрын
Awesome video...Please don't stop making such excellent videos.
@DefogTech6 жыл бұрын
Thank you for the motivation sir!
@gurupadamgundala51426 жыл бұрын
Please make more videos
@ITech20055 жыл бұрын
Defog Tech More videos :)
@saravanprathi69564 жыл бұрын
More videos pleaseeeee
@TauCu4 жыл бұрын
This helped me understand a lot about the JVM Thanks, you're very good at explaining things without any unneeded gibberish!
@mrchief33834 жыл бұрын
Man, you are awesome. I was struggling trying to understand atomic operations and the use cases of volatile variables. Thank you so much
@Machinerium5 жыл бұрын
I had an interview question like that.. This is a very clean explanation , keep doing it!
@skaLife4 жыл бұрын
You have a good teacher in you. Please continue the good work.
@narendrasriram11 ай бұрын
This playlist you have made is too awesome. your example/explanation for happens-before has a few issues. Not sure if I understood wrong, otherwise.Thank you so much for this playslit.
@prashanttiwari1204 жыл бұрын
Best video on java on whole KZbin universe
@sivagurunathanparanitharan47144 жыл бұрын
🙏 You are the Best Teacher that I have ever seen.🥇, A classical method of approach = Superb indeed.👌.🎯Please Could you kindly teach us Flutter & Dart & Go lang & Scala too . Pleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeese Sir..... 🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏
@saravanprathi69563 жыл бұрын
You are a fantastic teacher.. please please make more videos
@contactdi84262 жыл бұрын
I am really amazed sir by your knowledge. Can you please share how you plan and learn all these things/concepts? Do you require them all these in your office related work regularly? I have been in IT industry for around 4-5 years but literally never faced these things, therefore never felt the need either to learn these. Please share some suggestions as senior developers to juniors on learning paths.
@vikaskokae2 жыл бұрын
Exactly my feelings after been in the industry for a couple of decades. Learning from experience when applying concepts to real life work enhances understanding of concepts to the next level, something that prevail for years. I would be interested to know from Deepak, how he went about approaching concepts.
@rajasruji24763 жыл бұрын
Wow…. Such an well articulated video. I felt this topic to be very difficult to understand before I watched your video. Please sir keep adding more and more topics to this channel. For the first time fell in love with subject videos.
@sumitbabel54154 жыл бұрын
Honestly exceptionally well explained Sir, hats off
@kotojava2 жыл бұрын
this channel deserve much more subscribers.
@ganeshpathak48045 жыл бұрын
Hi, I have one request if you could make a video on Performance improvement techniques. Not necessarily related to threading but in general. I am sure everyone would be benefited as you explain complex things in very simple way :)
@DefogTech5 жыл бұрын
Sure, sounds like a good idea. Will add it to the list
@vikramreddy75864 жыл бұрын
This video is pure GOLD!!!
@VikiSangani5 жыл бұрын
Very nicely explained. Please keep making such videos.👍👍
@Lucky-uz3je5 жыл бұрын
You are my interview trainer...love you bro:)
@shaikshasayyad1315 жыл бұрын
Crystal clear explanation!!! thanks a million .. I observed that the code was working fine though i had not used the volatile keyword at 9:37. what could it be the reason ?
@DefogTech5 жыл бұрын
It will work 99% of the time, but java memory model doesn't guarantee it will work all the time, thus we need the keyword
@shaikshasayyad1315 жыл бұрын
Thanks a lot for your your response.
@harish77065 жыл бұрын
I have been going through a lot of JAVA topic videos in different forums, by far Defog Tech is the best that I have come across. Advanced topics explained in a simple way which provides clarity. Keep going
@DefogTech5 жыл бұрын
Thank you for the kind words sir!
@edeepakjain5 жыл бұрын
Best explanation of volatile so far... 👌
@SatyaprasadMr4 жыл бұрын
Videos are very useful. Crisp & Clear. I request to make more videos
@philthehuman6 жыл бұрын
Very clear video, though I would like suggest you to fix the code examples of locks or at least to have a disclaimer by voice that no one should use locks by your examples and should read a documentation instead which says you have to use "try { .. } finally { lock.unlock(); }" construct.
@DefogTech6 жыл бұрын
Agreed. Will add a card to the video. Thanks!
@adamrizk67354 ай бұрын
What an excellent presentation, thank you for sharing
@noortech2543 жыл бұрын
Bro You are simply amazing. You may be not realised how much you are helping us. Thank You bhai :D
@DrAkyla11236 жыл бұрын
Very concise and easy to grasp. Great job!
@perrym804811 ай бұрын
Best explanation I've seen, great work!
@BeatSyncBytes4 жыл бұрын
Explaination with L2 and L3 is so deep. How do you get so deep
@chetankhandave10725 жыл бұрын
very very good explanation, it shows you have studied very hard , Hats off to you. But I will be very happy if you provide good working example to show difference between with volatile and without volatile, because when I try to find out difference using volatile and without volatile I do not notice anyone. your example in video do not demonstrate difference when I try it myself. thanks
@DefogTech5 жыл бұрын
Correct, so without volatile JVM doesn't guarantee other threads will see updated value. But it depends on speed of your operations, JVM implementation etc. Thus like for most concurrency issues it will work on local, will work in production for few days but might fail suddenly after
@chetankhandave10725 жыл бұрын
Yes you are correct, when I run my program again and again so many times then at some time situation arises and my volatile variable and non volatile variable get different values. I will be happy to share program to you. thanks
@anilkinikar5 жыл бұрын
Awesome clarity. Voice is very clear and videos are well designed. Subscribed 👍
@venu57915 жыл бұрын
Thanks for sharing this concept. I had only some theoretical knowledge of this before I watch this imp video.
@ivanevseevv3 жыл бұрын
Explanation is very good and sharp!
@pradhumansingh11953 жыл бұрын
Who the hell dislikes such a great videos??
@devendrawangikar28903 жыл бұрын
other video makers :)
@StyleTrick4 жыл бұрын
Hey great videos as always! I just wanted to ask, since primitives are passed by value and Objects are passed as reference, does the JVM only cache primitives into a threads local cache? If the value being updated was an Integer Object, e.g. new Integer(1), it would not need flushing as the object is passed by REFERENCE?
@sandeepkumarsahoo34585 жыл бұрын
Crystal clear explaination... Loved it
@shobhitmittal774 жыл бұрын
This is one ultimate video...subscribed !!
@nlarralde3 жыл бұрын
Great video, very clear explanation and examples. Thank you
@thomashpfner-dahl14336 жыл бұрын
Dude!! You are awesome, a true lifesaver. You are the first that have made it simple, at least that I have come across
@DefogTech6 жыл бұрын
Thanks much buddy!
@tarang653 жыл бұрын
Amazing presentation. All the videos are really helpful. Great work.
@viveksingh91205 жыл бұрын
Awesome mate. You are really doing great, very impressive
@purnimadas37626 жыл бұрын
That was really good. Thanks for posting, excellent, clear and to the point presentation, good job!
@DefogTech6 жыл бұрын
Thank you
@studio20384 жыл бұрын
very simple to understand
@sshks104 жыл бұрын
Very good and simple explanation
@kannadasans75644 жыл бұрын
Could you make a samples of reactive programming followed by your aka Java fiber videos. For eg, How to use RxJava for the below categories of apps, 1. Considering both frontend and backend 2. Considering there is no frontend and it's purely backend app. Doing good job. Really great👍
@ardiansyah67944 жыл бұрын
Oh thanks man. I wish you were my lecturer 😀
@__nitinkumar__3 жыл бұрын
2:50 loved this diagram man.
@niftymiller60576 жыл бұрын
Very good and crisp way of explanation. Keep doing this good :) work
@DefogTech6 жыл бұрын
Thank you!
@coreyhartman45105 жыл бұрын
This video is excellent.
@hakura88 Жыл бұрын
love your simple examples. thank you
@RobinsonGames5 жыл бұрын
Really good explanation with a good visual display of those
@gurupadamgundala51426 жыл бұрын
Awesome. Expected more videsos 👌👌👌
@DefogTech6 жыл бұрын
Thank you sir!
@masteradityamishra94866 жыл бұрын
Very nice explanation appreciate it, thanks.
@mujahidshaikh50343 жыл бұрын
everything to the point.. love ur videos bro❤️
@abhik94505 жыл бұрын
Thanks for a proper explanation on happens-before 🙂
@AkshayNalavade183 жыл бұрын
Volatile won't work here. You have to use Atomic integer.... You have explained it in another of your videos. Volatile vs Atomic
@MarkGla553 жыл бұрын
Excellent explanation. Thank you
@kakashihatake48406 жыл бұрын
Really loved the explanation. Thank you
@StyleTrick6 жыл бұрын
Great video! Would it be possible to showcase when this happens? I've tried to replicate the issue with creating 2 new threads, however they seem to read x perfectly fine.
@DefogTech6 жыл бұрын
Sure, so it is possible that JVM will show the updated value to the other thread even though it is not say volatile, but, it is not guaranteed. In certain cases it can choose to keep using cached value. With volatile and other JMM rules we can be 100% sure that read-after always works. Can you share your code please. I can take a look
@StyleTrick6 жыл бұрын
public class JavaMemoryModel { static int x = 0; public static void writerThread() { x = 11; System.out.println("In writer thread: " + Thread.currentThread().getName() + ": " + x); } public static void readerThread() { int r2 = x; System.out.println("In reader thread: " + Thread.currentThread().getName() + ": " + r2); } public static void main(String[] args) throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(6); executorService.execute(new Runner()); executorService.execute(() -> readerThread()); executorService.execute(() -> writerThread()); executorService.execute(new Runner()); executorService.execute(() -> readerThread()); executorService.execute(() -> writerThread()); executorService.shutdown(); } static class Runner implements Runnable { @Override public void run() { x = 29; System.out.println("In Runner Class: " + Thread.currentThread().getName() + ": " + x); } } } Something like this. How would you replicate the error of the shared cache not being updated?
@DefogTech6 жыл бұрын
Check this code gist.github.com/DeepakVadgama/fdd282d9b10794ed21867dc912bafffd Try calling reader and writer methods, instead of reader2 and writer2. One uses atomicInteger, other uses int. In the output, int shows inconsistent results, while atomicInteger one prints in correct order.
@shilpaagrawal71264 жыл бұрын
Awesome video... Can u also make video on design patterns ...?
@aniln47364 жыл бұрын
In my case there is concurrent hashmap obj that holds configurations read from different server. Quartz scheduler will fetch configuration data for every 30 sec and update a new data (whole obj) to this concurrent hashmap.. In this case ,in my opinion voltaile should be used to always get the updated obj to the reader threads but some quality checking tools raising it as bug So any suggestions during this scenario
@prasantkumar76936 жыл бұрын
Thank you for nice explanation and make more videos.
@dinkarinjosh5 жыл бұрын
can you please make a video on working of JVM and its architecture? btw good job.
@AmitGadaley173 жыл бұрын
Hi, Could you please make a video on memory management in java or provide a useful link for it. Thanks!!
@gauravbajpai68905 жыл бұрын
U earned a fan today - Subscribed !
@umeriqbal56625 жыл бұрын
Jigger u r love... Awesome video.... Amazing teaching skills... Thanks a lot
@isayanpal2 жыл бұрын
You're just brilliant! 🙏🏽
@manognajoshik84653 жыл бұрын
Thank you very much sir!! You are amazing ❤️
@ibrahimshaikh36424 жыл бұрын
Thank u, waiting for more videos on java
@krishnach72904 жыл бұрын
At 7:01 in video, x is volatile. But not a b or c. Will they also pushed back to main memory along with x? later in the same video you showing synchronise / locks for all fields
@Murga_Mutton4 жыл бұрын
Hi, Thanks for the video. How is the volatile or synchronized or lock usage different from having the field in the constructor? Can't the shared cache object be used by putting the field in the constructor method and calling it in different threads?
@srinathchintha95653 жыл бұрын
Hi why did you stop making videos.. please make more videos..
@pogrommist4 жыл бұрын
Awesome explanation and examples!
@vikrantharne85765 жыл бұрын
But in multithreaded environment u can not be sure about which thread will get chance though we can override thread schedules behavior by setting priority...so in this case we need synchronization? My another questions is when thread executes the run method is it the only method thread executes then what about about synchronized blocks and synchronized methods...do we need to write those inside run method.... please clear my doubts..
@DefogTech5 жыл бұрын
Its difficult to ensure one thread is scheduled before another even in case of priority (eg: if CPU is multi-core, both low and high priority threads can be scheduled together). So its better to code using concurrency utilities (eg: Latches, Semaphores, volatiles etc.) Yes, most of the code that we want to run in a separate thread (as opposed to main thread) needs to be in run or call methods of Runnable/Called. Though, in Java 8, CompletableFuture or other frameworks/libraries could take your code in Supplier/Function/or any form, and run it within runnable without us knowing about it.
@vikrantharne85765 жыл бұрын
@@DefogTech thanks for the reply
@jeremythen72395 жыл бұрын
Best explanations! Keep it up.
@sharadrsoni19914 жыл бұрын
Late comer :) Question: How at 9:03 locks will result in maintaining the variables a,b,c,x being atomic? The locks are for methods, which I understand as, no other there can enter in THAT method, but if some other methods are executed, then you may get the stale data. Isn't it?
@vijayp68105 жыл бұрын
Learnt new information..thank you so much
@jiteshkumar33873 жыл бұрын
Good explanation !! :) Very usefull
@khushbuchoudhary51853 жыл бұрын
Super video! I applauded for ₹40.00 👏
@harshitshukla73826 жыл бұрын
Can you make a video on stream api in java8? I am very much looking forward to understanding them and you have an excellent presentation and organization of the videos. Keep doing the good job!!
@DefogTech6 жыл бұрын
Thank you sir! Stream API is on my list, will definitely upload one in coming weeks
@kakashihatake48406 жыл бұрын
Please do more such videos
@narendramanikanta75975 жыл бұрын
Awesome explanation mate. God bless you
@sbylk996 жыл бұрын
Great tutorial, thank you SIR!
@DefogTech6 жыл бұрын
You're very welcome!
@angelakarapetyan5863 жыл бұрын
I cannot understand one thing, how can synchronized work without volotile correctly, Does not thread copy x only to it's memory anyway?
@mehulmakwana70915 жыл бұрын
Awesome explanation buddy. thanks a lot. :)
@vijaykumarreddyt3287 Жыл бұрын
You are doing Great! Dude
@siddharthswain94635 күн бұрын
Thanks a ton! So helpful.
@Jayantch.9994 жыл бұрын
Super explanation 👍
@abhinavsrivastava18705 жыл бұрын
Can Volatile keyword be used with HashMap in any where code snippet. If yes, how to do that?
@hbhatia9992 жыл бұрын
@DefogTech At time 8:47 How we are saying that value of all 4 variable will get updated while reading in readerThread because You are saying that X is not volatile. ?? As per first video of Volatile ,In this it was said that volatile values gets updated in Cache and because of that we are able to get updated value in different thread. Please help in this..
@DefogTech2 жыл бұрын
Updates to variables are visible to other threads by using any one of the options, volatile, synchronized or locks. Thus if you are using synchronized, even if variable is not volatile, updates will still be visibile to other threads.