Java ExecutorService - Part 1 - Introduction

  Рет қаралды 418,927

Defog Tech

Defog Tech

Күн бұрын

Learn how to parallelize your tasks and operations easily in Java without cooking up your own Threads.
Part 1: Introduction - • Java ExecutorService -...
Part 2: Type of Pools - • Java ExecutorService -...
Part 3: Constructor / LifeCycle - • Java ExecutorService -...
Part 4: Callable/Future - • Java ExecutorService -...
Channel
----------------------------------
Complex concepts explained in short & simple manner. Topics include Java Concurrency, Spring Boot, Microservices, Distributed Systems etc. Feel free to ask any doubts in the comments. Also happy to take requests for new videos.
Subscribe or explore the channel - / defogtech
New video added every weekend.
Popular Videos
----------------------------------
What is an API Gateway - • What is an API Gateway?
Executor Service - • Java ExecutorService -...
Introduction to CompletableFuture - • Introduction to Comple...
Java Memory Model in 10 minutes - • Java Memory Model in 1...
Volatile vs Atomic - • Using volatile vs Atom...
What is Spring Webflux - • What is Spring Webflux...
Java Concurrency Interview question - • Java Concurrency Inter...

Пікірлер: 291
@ramcorp542
@ramcorp542 4 жыл бұрын
Thank you, you have a skill for explaining complex concepts in a clear concise manner. I would love to see full fledged courses created by you.
@AyushSharma-ux4fk
@AyushSharma-ux4fk 3 жыл бұрын
A very intelligent statement. If your tasks are I/O intensive e.g. DB calls, Network calls. Most of the threads would be in waiting state (waiting for DB response or Network call response) in such a scenario having a large thread pool is the right way to go. That way you would be able to start more tasks. Thanks
@amritasahoo6773
@amritasahoo6773 6 жыл бұрын
Really explained well. This is the best I have found till now. Thank you. Keep up the good work :)
@DefogTech
@DefogTech 6 жыл бұрын
Thank you for the kind words!!
@yathiraju1000
@yathiraju1000 5 жыл бұрын
Yes this guy is awesome in subject and the way he is describing the concepts are speechless . I heard few concepts and all are above the notch.
@orangefield2308
@orangefield2308 11 ай бұрын
best work ever, please make more videos !! I understand executorService finally
@fazilkhan6779
@fazilkhan6779 Жыл бұрын
This executor service series is one of the best ever educational KZbin series ever. Thanks a ton. Your explanation is awesome.
@mostinho7
@mostinho7 4 жыл бұрын
Done thanks Thread pool instead of creating a 1000 threads which is expensive, can make a fixed size pool and submit 1000 tasks to it. 3:40 how it works internally 5:30 ideal pool size for cpu task is number of cores 9:30 thread pool size for io intensive tasks
@yathiraju1000
@yathiraju1000 5 жыл бұрын
Guys please share his videos in other groups. we have to support this kind of content and it will be very useful to people who are looking for good content
@shubhamjain2810
@shubhamjain2810 4 жыл бұрын
Your way of explaining the topics are really good. I am having one question. It might be stupid one,but I wants to know How to handle the Atomicity for write and Read operation in Such case. Pool size is of 20. t1 to t20 are doing write operation. ---> They will be in waiting state t21 to t30 are doing Read operation. ---> In between any of this thread comes in and start reading and get response before completion of write operation of all 20 threads . It may get old data.
@manish436
@manish436 2 жыл бұрын
Really great explanation, adding one formula for I/O intensive task, according to "Java Concurrency in Practice" Number of threads = Number of Available Cores * (1 + Wait time / Service time)
@MrSN99
@MrSN99 6 ай бұрын
as i'm kotlin dev i just skipped this completely. But you explaining this made some things clearer. I didn't expect this.
@highlightsportz
@highlightsportz 2 жыл бұрын
I as individual surf youtube a lot for learning purpose and almost have watched most of the youtuber on internet, But this channel is at another level in terms of quality . Thanks a lot sir . It would be great if you could take out some time and nail the microservice buzz words
@viveksingh-rt4py
@viveksingh-rt4py 6 ай бұрын
Thanks a ton for sharing the video. Clear and concise explanation. May I ask you one question. Say If I have multi core processor and I have initialised ExecutorService with pool size as 100, all my task are IO intensive. Scheduler will make use of all core and will execute threads on different core. Is my understanding right.
@ruchigarg7788
@ruchigarg7788 3 жыл бұрын
Really, so easily explained these concepts with how to implement. Superb. Should create a playlist of java 8.
@sharatchandra9198
@sharatchandra9198 3 жыл бұрын
I have read so many places, everything is of no use, you are brilliant.
@ankitnavalakha508
@ankitnavalakha508 5 жыл бұрын
There are so many videos for multithreading available in KZbin but I found you best because of your diagram presentation which is unique. You explained very well. You are awesome and continue with this key feature.
@divyamahesh9032
@divyamahesh9032 8 ай бұрын
You know while I start the interview preparation I'm watching all these videos saved , and this is my 3rd time watching it while I'm moving out of my 2nd company....🎉🎉 Thanks for your great work .
@DefogTech
@DefogTech 8 ай бұрын
That's so heartening to hear! Thank you for the kind words. Good luck for the new job. Wish you great success there as well.
@shivshaktipandey7148
@shivshaktipandey7148 Жыл бұрын
explaining with how , why , what , when -------------- everything about the topic -------- hats off ----------- u will complete 100k soon bro
@dvoulio
@dvoulio 4 жыл бұрын
Guys.... the absolutely most crystal clear explanation of Thread Pools I have ever heard. Beautifully sparse, no-noise or arm waving... well-presented and recorded. Bravo... I have become a great fan and are convincing others as well !! One small request... what is the cursor enhancing software you are using in the presentation ???
@DefogTech
@DefogTech 4 жыл бұрын
It's pointer function in Google Slides. Thank you so much for the kind words BTW! Means a lot to me
@sametbaskc3768
@sametbaskc3768 Жыл бұрын
Thanks for this clear explanation. You are doing a great job. I just wonder what is the strategy you follow to learn the concepts in crystal clear? Could you also share the resources (book, articles, docs) you follow when you were learning this topics?
@clswar00p
@clswar00p 3 жыл бұрын
Pleasant voice while explaning.Very clear
@raidtheferry
@raidtheferry 6 ай бұрын
Very high quality explanation and accompanying slideshow. I appreciate you making this video
@nilesh6429
@nilesh6429 6 жыл бұрын
ThreadPoolSize tread off with CPU core concept is excellent. You have cleared all doubts about the size of the pool. Thank you.
@DefogTech
@DefogTech 6 жыл бұрын
You're welcome! I'm happy it helped
@thebibhuty
@thebibhuty 5 жыл бұрын
Just one suggestion, always give a link to working code, you explain well, the only thing I think missing is a link to a working code
@rishinjiya42
@rishinjiya42 4 жыл бұрын
The best combination of content and explanation. I wish Deepak had videos and courses on everything I need as a Java/Spring developer
@siteshkulkarni5924
@siteshkulkarni5924 2 жыл бұрын
Hi Deepak, I just watched all your 4 videos related to ExecutorService, you have shown how things can be explained in a super simple way yet powerful. Great job!! thanks.
@catlord69
@catlord69 4 жыл бұрын
What the hell, you explain so well and clearly ! Amazing
@pepperjack6749
@pepperjack6749 6 жыл бұрын
Most concise and clear executor service description I’ve seen. Thank you!
@DefogTech
@DefogTech 6 жыл бұрын
You're welcome!
@sakship1558
@sakship1558 Жыл бұрын
Bestest explanation seen on Internet, thank you so much.
@ahmedkhan8352
@ahmedkhan8352 7 ай бұрын
I watched many videos, but your video is the best till now I have watched. Can you please make videos on "Fork Join" as well ?
@marshalkiruba
@marshalkiruba 4 жыл бұрын
Loved the explanation. Just a lame question. For a CPU intense operation, shouldn't the ideal thread pool size be (no of cores-1) as there is already a main thread running?
@rizwansayyed7893
@rizwansayyed7893 3 жыл бұрын
i really would like to know this
@HussainMohammedAshruf
@HussainMohammedAshruf 3 жыл бұрын
@@rizwansayyed7893 main thread dies soon, before other threads!
@rizwansayyed7893
@rizwansayyed7893 3 жыл бұрын
@@HussainMohammedAshruf i don't understand does main thread count in cpu runtime cores available
@contactdi8426
@contactdi8426 2 жыл бұрын
Holy Moli buddy!!! This was spot on! The BEST on the internet, cleared all my doubts right from basics to advance.. Super Thanks, I really appreciate great people like you that helps the community.
@sathishspeaks
@sathishspeaks 2 жыл бұрын
Defog come back and do more videos you are the best in explaining complex concepts buddy
@divyanshpatel1301
@divyanshpatel1301 Жыл бұрын
All the concepts u given is aksed in an interview, best explanation ❤
@harikavolam7123
@harikavolam7123 3 жыл бұрын
Thanks for explaining in both code and internal visualization of threads. Great explanation. You have explained complicated topic in very simple way.. Thanks a lot
@SchkuenteQoostewin
@SchkuenteQoostewin 5 жыл бұрын
Could you please teach the rest of India how to speak English. You are the poster child of clear flunet English. Your pitch and clarity in the words are masterful. Also your knowledge is strong, I love the tutorial and I am as American as corn.
@sanjeevanemani6720
@sanjeevanemani6720 4 жыл бұрын
maan.....where u been all these days? Glad to find ur channel. Please make more videos.
@edeepakjain
@edeepakjain 5 жыл бұрын
Best video... Finally someone explained thread pool size derivation
@kitkarson4226
@kitkarson4226 3 жыл бұрын
Man .. god bless you!! Thanks!! you explain complex topics in a way anyone can understand.
@shekhar_2014
@shekhar_2014 3 жыл бұрын
I must tell you , your explanation on all topics are very clear and easily understandable. Thank you somuch for the vdos .. :) .. Can you please upload a vdo on React Js , If posible.
@RamKumar-dm6es
@RamKumar-dm6es Жыл бұрын
Thank You Deepak bhaiya for explaing this concept so beautifully
@rj7560
@rj7560 4 жыл бұрын
Big fan of you. Please more videos... Thank you very much.. much appreciated
@odilhonislomov8954
@odilhonislomov8954 2 жыл бұрын
THANK YOU !!! A LOT OF THANKS. There is no better explanation than yours. You are the best. Keep going
@sukiriparanavithana677
@sukiriparanavithana677 3 жыл бұрын
Hi Deepak, I came across your work while searching for a clear explanation on use of Blocking Queue within ExecutorService. You have done a splendid explanation with excellent visual. My doubt is not cleared since you do not use Blocking Queue in the code you are showing. Yet your illustration has it. So does that mean a Blocking Queue exists within Executor by default? And we don't have to worry managing it? I have seen examples of assigning a separate BlockingQueue object when creating the ExecutorService. I will watch the other 3 as well.
@DefogTech
@DefogTech 3 жыл бұрын
>So does that mean a Blocking Queue exists within Executor by default yes, thats correct. ExecutorService internally uses a BlockingQueue and we need not worry about managing it.
@ayendreyeesinha7204
@ayendreyeesinha7204 3 жыл бұрын
Nicely explained,👍👍👍👍, would like to see some video on design patterns from interview prospective...
@jamshadm
@jamshadm 3 жыл бұрын
I didnt understand why there are 49 dislikes for this video? He explained very well..
@utkalkesharisahu3014
@utkalkesharisahu3014 2 жыл бұрын
You should post more bro. You really explain complicated topics in a really simple manner.
@kooostia16
@kooostia16 2 жыл бұрын
Can we have two thread pools, one for io tasks and another for cpu intensive tasks?
@DefogTech
@DefogTech 2 жыл бұрын
Yes, we can have multiple threadpools in an application
@sekharsoftware
@sekharsoftware 5 жыл бұрын
Really precise to the point and very useful. You should do a podcast.
@GanaviN-f1o
@GanaviN-f1o 3 ай бұрын
you explained this so clearly.....thanks for this !
@philipmartinelli6994
@philipmartinelli6994 2 жыл бұрын
Awesome use of visualizations. This is really helpful, thank you!
@priyanka0112
@priyanka0112 3 жыл бұрын
Awesome explanation. This is the best i have seen so far. Looking forward to watch all your videos.
@MridulJK
@MridulJK 2 жыл бұрын
Thank you, is there any equation for determining thread pool size approximately? Right now it seems to be computed heuristically.
@subhashanand2276
@subhashanand2276 4 жыл бұрын
Thank you for clear and precise explanation. Is it useful to do multithreading on a single core processor in any way?
@rizwansayyed7893
@rizwansayyed7893 3 жыл бұрын
its not possible as it has a single core your threads will be bump away in between i think
@sanjaykantheti4002
@sanjaykantheti4002 5 жыл бұрын
Deepak correct me if I am wrong. I believe reactive programming was introduced to avoid threads being waited for the IO operation to be completed.
@DefogTech
@DefogTech 5 жыл бұрын
Thats correct.. Checkout my video on Spring Webflux, that has this exact comparison
@gobindarora007
@gobindarora007 5 жыл бұрын
Cleared all my doubts. Thanks for this amazing video. Keep doing the great work.
@pratiklohar4566
@pratiklohar4566 4 жыл бұрын
This the best explanation on executor service I have found so far . Thank you so much. Expecting more such videos from you !
@manishmanghwani731
@manishmanghwani731 3 жыл бұрын
That's not gonna happen anytime soon :(
@flywithashutosh4772
@flywithashutosh4772 5 жыл бұрын
Why so less subscriber to such a beautiful channel , great work dude keep it up.
@DefogTech
@DefogTech 5 жыл бұрын
Thanks buddy!
@krishnapanigrahi6926
@krishnapanigrahi6926 3 жыл бұрын
Do we need any locks while using executors? bcs with executors task is executing concurrently ..Correct me if i am wrong
@AshishBurnwal
@AshishBurnwal 6 жыл бұрын
This is the best tutorial I have ever seen for executor framework. Thanks a lot
@DefogTech
@DefogTech 6 жыл бұрын
Thank you sir!
@FalconMinds
@FalconMinds 2 жыл бұрын
Awesome explanation.. love your work brother
@hemanthsavithala4081
@hemanthsavithala4081 5 жыл бұрын
For example :: there are t1...t10 threads. Assume that at t5 exception occurs. In this case will rest of the threads execute ?
@DefogTech
@DefogTech 5 жыл бұрын
Yes, one thread dying does not effect other threads
@mattmilzewski1062
@mattmilzewski1062 4 жыл бұрын
Explained excellently you are an absolute legend
@vijayakumarvj
@vijayakumarvj 5 жыл бұрын
Can you pls make videos with in-depth details on generics..I must say above videos are incredibly awesome
@adiforkrishna
@adiforkrishna 10 ай бұрын
if thread pool internally using blocking queue which is thread safe then how thread pool executing those task synchronously ? Because if t0 picks up the task1 so t1 can't picks up task 2 until t0 doesn't finish its work, because blocking queue is thread safe so it will not release other thread until first doesn't finish ? right ?
@RavikumarMandha-z6u
@RavikumarMandha-z6u Ай бұрын
Hi all i want to understand little further.. now incase of spring boot application we are not creating any executors service rite, are these created internally by application itself? As he told that DB , Network calls will utilize lot of CPU.. I have one more doubt what is process id and port num
@techieszone3704
@techieszone3704 5 жыл бұрын
Fantastic explaination..thanks. Can you pls share the slides of this tutorials also. Thanks!
@rishipollai5646
@rishipollai5646 3 жыл бұрын
Lots of love and support 💖 .. one of the best explanation
@mehulsolanki9435
@mehulsolanki9435 Жыл бұрын
Clear and concise. As simple as it can get. Keep up the good work!
@abzzz4u
@abzzz4u 4 жыл бұрын
All answers in one video ....keep them coming bro
@parambharti7095
@parambharti7095 3 жыл бұрын
Extremely awesome. Please keep making videos like this.
@muchukundareddy5315
@muchukundareddy5315 Жыл бұрын
Great Explanation, 👍Could you please link this explanation to some Real-time scenarios(Enterprise applications)
@br4676
@br4676 3 жыл бұрын
Thanks sir , this is the best video I have seen so far on this topic
@manishghoshi3861
@manishghoshi3861 2 жыл бұрын
The best till now. Thanks.
@shikharchoudhary7639
@shikharchoudhary7639 5 жыл бұрын
Your visualization techniques are phenomenal.
@princelowienalasa8776
@princelowienalasa8776 4 жыл бұрын
How I wish to add the new Java 8's newWorkStealingPools() method Thanks :)
@chakibbensari1850
@chakibbensari1850 3 жыл бұрын
Hi, Thank you for the explanations I just want to understand something : The number of thred exucting an application is equals to number of available CPU cors. So, in the case we have IO tasks, and we have the risk to have all available Threds on wait status, how can the other Threads execute. Ex; for 4 available cors, 4 threds are on wait status so it's not possible to excute a fifth thread because there is only 4 available CPU cors. i am right ?
@m.arslankhan7449
@m.arslankhan7449 4 жыл бұрын
if I have a 4 cores, I will make a thread pool of 4 size but if I want to do io (database/network call operation) task. then how I can decide to make a max number of thread pool. In your case you make the size of pool 100 for networking operation task. what if we have only 2 core or we have more than 12 cores what would we set the max size of pool?
@DefogTech
@DefogTech 4 жыл бұрын
I have made another video calling "What is ideal threadpool size" that might help answer this question
@m.arslankhan7449
@m.arslankhan7449 4 жыл бұрын
@@DefogTech I watched that complete video. You told that if the task is cpu intensive then ideal pool size would be the cpu core count, If IO intensive task then ideal pool size should ne "Hight". So what do High means? How to decide the pool size for io intensive task beside 2 core /4 cores/8/12/16....?
@DefogTech
@DefogTech 4 жыл бұрын
Depends on the latency of the IO task, and arrival rate of new tasks. If IO is long then count can be higher.
@786PrvN
@786PrvN 6 жыл бұрын
Very much simplified and same effective as well. +1 :)
@RohitPal-lz1wf
@RohitPal-lz1wf 3 жыл бұрын
Very well structured and explained perfectly. I would love to see the tutorial during my free time
@raghavmanchanda4736
@raghavmanchanda4736 Жыл бұрын
Best explanation ever, thanks for it😇😇
@bhavanprajapati4773
@bhavanprajapati4773 4 жыл бұрын
good explanation but i have one doubt. you tell java thread is os thread . what do you mean by that statement?
@DefogTech
@DefogTech 4 жыл бұрын
Operating System has multiple threads per process (for example a music player application running would internally create multiple OS threads for it to run). In Java, when you create a thread, internally it just asks Operating System to create a kernel thread. 1:1 mapping
@dineshchandgr
@dineshchandgr 3 жыл бұрын
Hi Deepak. I have a doubt. What is the difference between server thread pool size and executor thread pool size?
@DefogTech
@DefogTech 3 жыл бұрын
server thread pool = thread pool of the server software like tomcat (which you can check from its source code, and they also allow configuring it to different size) executor thread pool size = custom thread pool that we create within the code to perform any tasks
@dineshchandgr
@dineshchandgr 3 жыл бұрын
@@DefogTech So if I set tomcat server thread pool to 200. Then it can handle 200 requests at a time right. Then I set executor thread pool to 10 for eg. How will the OS schedule the sever threads and our executor threads on the cpu core?does it mean that the total thread count is 210?
@ganesh221b
@ganesh221b Жыл бұрын
Very well explained, thanks!
@himanshutripathi5735
@himanshutripathi5735 4 жыл бұрын
@deepakvadgama Your way of explanation is awesome. I request you if you can add some System Design Videos during lockdown days, It will help the community and your subscriber a lot. I requesting you just because your way of teaching is just awesome. watched almost all videos and learned a lot. Kindly make videos on System design concept. Thanks Himanshu
@derrick3534
@derrick3534 6 жыл бұрын
Wow way better than the Udemy tutorial on Executors. You should expand on this and make a Udemy tutorial. Great teaching skills.
@DefogTech
@DefogTech 6 жыл бұрын
Thank you! My long term plan is to create my own site like egghead.io , let's see how that goes.
@shortsmadebysatyam
@shortsmadebysatyam Жыл бұрын
A Thread pool is a good concept to handle multiple tasks asynchronously. In case of more incoming tasks, we can hold them in the queue. How can we limit the incoming tasks held in the queue?
@Aegon1995
@Aegon1995 Жыл бұрын
using semaphores we can limit the thread permits to the pool.
@vkalaivanan
@vkalaivanan 4 жыл бұрын
Concepts are clear and simple to understand. Thank you :)
@priyanka0112
@priyanka0112 3 жыл бұрын
Please create videos on Design Patterns and SOLID Principles.
@CodeNCode-rm8ci
@CodeNCode-rm8ci 3 жыл бұрын
Very good explanation.
@kamleshpar9847
@kamleshpar9847 4 жыл бұрын
Very well explained , pl continue your excellent work
@prateekgupta8861
@prateekgupta8861 3 жыл бұрын
Very very well explained. Thanks.
@rajeshg3570
@rajeshg3570 2 жыл бұрын
awesome explanation .. really like it
@zakb.7108
@zakb.7108 4 жыл бұрын
Very nice presentation, I have a question though, when we talk about cpu cores, they arent not necessarily representative of the nulber of threads available isnt that right?
@DefogTech
@DefogTech 4 жыл бұрын
Typically one cpu core can run one thread except hyperthreading which can run 2 threads.. you are right it's not always 1:1 mapping but it becomes complex to understand otherwise.. In terms of waiting threads vs running threads I recommend a video in my concurrency interview playlist
@Maddy-jn5pk
@Maddy-jn5pk 6 ай бұрын
Thank you, amazing explanation!
@mradityapatnaik
@mradityapatnaik 2 жыл бұрын
A very nice tutorial. However, we missed to highlight one very important aspect and that is while using ExecutorService, one must call shutdown() when you are done calling all your tasks. And finally await with awaitTermination in a possible finally block. If we don't do that the ExecutorService continuous to listen for more tasks and doesnt kill itself automatically.
@mradityapatnaik
@mradityapatnaik 2 жыл бұрын
I can see that this has been covered in the third part of the same series.
@DefogTech
@DefogTech 2 жыл бұрын
Generally, a run program will have ThreadPool always ON, and it will keep sending tasks into it. I have rarely seen having to shutdown the pool.
@mradityapatnaik
@mradityapatnaik 2 жыл бұрын
Hi @Defog Tech, your 3rd video in this series has covered the aspect of why ExecutorService object needs to be shutdown by calling shutdown() and after termination calling shutdownNow() in the finally block. If we don't do that then the ExecutorService continuous to listen for more tasks even when there aren't any more tasks to be executed resulting the program to never terminate which keeps the application alive for no reason.
@DefogTech
@DefogTech 2 жыл бұрын
Thats true, it will keep listening to the tasks but having threads in wait state is not a big problem (it will occupy some MBs). I dont think an running ThreadPool stops the program from existing. A Java program should be able to still exit I think
@mradityapatnaik
@mradityapatnaik 2 жыл бұрын
Ya, a listening executorService does prevent the program from exiting even after it executes all the given tasks. Thus, shutdown() becomes necessary followed by awaitingTermination for a certain timeout period. Basically what we expect from the program, actually happens on calling shutdown() on the service. It waits for all tasks to execute and then terminates the service.
@digvijaynalawade9207
@digvijaynalawade9207 2 жыл бұрын
Explained very nicely 👌
@smarttrupti2007
@smarttrupti2007 Жыл бұрын
Beautiful explanation
@HaSeebpjr01
@HaSeebpjr01 Жыл бұрын
Well explained, thanku so much
@muruganvellaichamy709
@muruganvellaichamy709 5 жыл бұрын
Very well explained. Thanks for this. :)
@sonyroy45
@sonyroy45 3 жыл бұрын
You are awesome, please don't stop posting such videos 🙏
@kogilathotavijayreddy4963
@kogilathotavijayreddy4963 2 жыл бұрын
Defog Tech! You live upto your name
Java ExecutorService - Part 2 - Type of Pools
8:02
Defog Tech
Рет қаралды 203 М.
What is Spring Webflux and when to use it?
17:46
Defog Tech
Рет қаралды 244 М.
Зу-зу Күлпаш 2. Бригадир.
43:03
ASTANATV Movie
Рет қаралды 733 М.
Это было очень близко...
00:10
Аришнев
Рет қаралды 1,9 МЛН
All Rust string types explained
22:13
Let's Get Rusty
Рет қаралды 176 М.
Java ExecutorService - Part 4 - Callable / Future
13:08
Defog Tech
Рет қаралды 181 М.
Java ExecutorService - Part 3 - Constructor & LifeCycle methods
13:12
Database Sharding and Partitioning
23:53
Arpit Bhayani
Рет қаралды 90 М.
Introduction to CompletableFuture in Java 8
19:34
Defog Tech
Рет қаралды 327 М.
Зу-зу Күлпаш 2. Бригадир.
43:03
ASTANATV Movie
Рет қаралды 733 М.