4-modul · 4-dars: Thread Pools · Callable/Future · ThreadLocal
Daraja: O'rta
Thread Pools · Callable/Future · ThreadLocal. Multithreading va I/O bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Thread Pools · Callable/Future · ThreadLocal tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Oldindan yaratilgan, qayta ishlatiladigan thread lar to'plami; vazifalar shu threadlarga taqsimlanadi.
Thread yaratish/boshqarishni abstraksiyalaydigan, thread pool orqali vazifalarni bajaruvchi framework (`java.util.concurrent`).
## Intervyuga tayyorgarlik ### Thread Pools nima? Oldindan yaratilgan, qayta ishlatiladigan thread lar to'plami; vazifalar shu threadlarga taqsimlanadi.
### Executor Framework qanday framework? Thread yaratish/boshqarishni abstraksiyalaydigan, thread pool orqali vazifalarni bajaruvchi framework (`java.util.concurrent`).
### Executor Framework nima maqsadda Java 5 da qo'shilgan? Qo'lda thread boshqarishni soddalashtirish, thread larni qayta ishlatish va resurslarni samarali boshqarish uchun.
### Executorlar qanday ishlaydi? Vazifalar (`Runnable`/`Callable`) navbatga (queue) qo'yiladi, pooldagi bo'sh threadlar ularni oladi va bajaradi.
### Executor Framework afzalliklari? Thread qayta ishlatilib resurs tejaladi, boshqarish oson, vazifa va thread ajraladi, oson kengaytiriladi.
### Java-da necha xil Executor mavjud? `newFixedThreadPool`, `newCachedThreadPool`, `newSingleThreadExecutor`, `newScheduledThreadPool`, `newWorkStealingPool` (va `ForkJoinPool`).
### Executor tasklarni nimada saqlaydi? Ichki navbatda (`BlockingQueue`) — bo'sh thread bo'lguncha vazifalar shu yerda kutadi.
### Executorlarni necha xil usulda o'chiramiz? `shutdown()` (yangi vazifa qabul qilmaydi, mavjudini tugatadi) va `shutdownNow()` (darhol to'xtatishga urinadi).
### Callable nima? `call()` methodli, natija qaytaradigan va exception tashlay oladigan interface (Runnable dan farqli).
### Future nima? Asinxron vazifa natijasini ifodalovchi obyekt; `get()` bilan natijani (tayyor bo'lguncha kutib) oladi.
### Callable va Runnable o'rtasidagi farq? Runnable — natija qaytarmaydi, checked exception tashlolmaydi. Callable — natija (`V`) qaytaradi va exception tashlashi mumkin.
### FutureTask nima? Ham `Runnable`, ham `Future` bo'lgan class — Callable/Runnable ni o'rab, natijani `get()` bilan olish imkonini beradi.
### Future class isDone() nima uchun ishlatiladi? Vazifa tugaganini tekshirish uchun (tugagan bo'lsa `true`).
### Future class get() nima uchun ishlatiladi? Vazifa natijasini olish uchun; natija tayyor bo'lmasa, tayyor bo'lguncha bloklab kutadi.
### ThreadLocal nima? Har bir thread uchun alohida (o'ziga xos) o'zgaruvchi nusxasini beruvchi mexanizm; threadlar bir-birinikini ko'rmaydi.
### ThreadLocalRandom nima? Har thread uchun alohida `Random` — ko'p thread muhitida `Random` dan tezroq (raqobat yo'q).
### ThreadLocal-ni qanday holatlarda ishlatamiz? Thread-ga bog'liq kontekst uchun (foydalanuvchi sessiyasi, `SimpleDateFormat` kabi thread-safe bo'lmagan obyektlar).
### ThreadLocal withInitial() static method nima uchun ishlatiladi? ThreadLocal ga boshlang'ich qiymat beruvchi (lambda/Supplier orqali) yaratish uchun.
## Versiya va aniqlik Java misollari Java 17 bazasiga mo‘ljallangan. JDK/JRE paketlash usuli distributivga bog‘liq; JVM bayt-kodni interpretatsiya va JIT orqali bajarishi mumkin. GC uchun aniq bajarilish vaqtiga kafolat yo‘q; finalization resurs yopish usuli emas. Thread stop/suspend/resume kabi eski metodlar amaliy yechim emas. Koddagi import, klass yoki tashqi kutubxona kontekstini tekshiring.
## Manbalar [Moduldagi savollar yo‘nalishi](https://github.com/jlkesh/pdp_online_java_lessons/blob/main/interviewquestions/4-module.md) [Rasmiy qo‘llanma](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/package-summary.html) [Sizning avvalgi savol-javob arxivingiz](https://lightyer.uz/java/interview.html)
Kod quyida o‘quv namunasi sifatida berilgan. To‘liq ilova uchun import, dependency va konfiguratsiya kerak bo‘lishi mumkin. SQLni faqat ajratilgan test bazasida bajaring.
Kod misoli
var pool = java.util.concurrent.Executors.newFixedThreadPool(2);
try {
var result = pool.submit(() -> 6 * 7);
System.out.println(result.get()); // 42
} finally { pool.shutdown(); }
// get() checked exceptionlari callerda boshqariladi.
Keng tarqalgan xatolar
- `Executor` ni `shutdown()` qilmaslik - dastur tugamay osilib qoladi.
- `Future.get()` ni timeout siz chaqirish - vazifa qotib qolsa thread abadiy kutadi.
Mashqlar
- `Executors.newFixedThreadPool(4)` bilan 10 vazifa yuborib, bajarilish tartibini kuzating.
- `Callable` yozib, natijani `Future.get(timeout)` bilan oling.
Teglar: pdp, modul-04, nazariya