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

Mashqlar

Teglar: pdp, modul-04, nazariya

Interaktiv ko'rinish (viktorina, izohlar, tarix)