4-modul · 5-dars: Fork/Join · Async · Singleton
Daraja: O'rta
Fork/Join · Async · Singleton. Multithreading va I/O bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Fork/Join · Async · Singleton tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Katta vazifani kichik qismlarga bo'lib (fork), parallel bajarib, natijalarni birlashtiruvchi (join) framework.
Ko'p yadroli protsessorlarni samarali ishlatish — «divide and conquer» vazifalarni parallellashtirish uchun (Java 7).
## Intervyuga tayyorgarlik ### Fork Join Framework nima? Katta vazifani kichik qismlarga bo'lib (fork), parallel bajarib, natijalarni birlashtiruvchi (join) framework.
### Fork Join Framework nima uchun Java-ga qo'shilgan? Ko'p yadroli protsessorlarni samarali ishlatish — «divide and conquer» vazifalarni parallellashtirish uchun (Java 7).
### Fork Join Framework afzalliklari? Work-stealing bilan yadrolarni to'liq band qiladi; katta rekursiv vazifalar uchun samarali.
### Fork Join Framework qaysi queue dan foydalanadi? Work-stealing queue (deque) — bo'sh thread band thread queue sining oxiridan vazifa «o'g'irlaydi».
### Fork Join va Executor Framework o'rtasidagi farq? Executor — mustaqil vazifalar uchun oddiy pool. ForkJoin — bir-biriga bog'liq, bo'linadigan (rekursiv) vazifalar uchun, work-stealing bilan.
### Asynchronous programming nima? Vazifani kutmasdan (bloklamasdan) ishga tushirib, natija tayyor bo'lganda qayta ishlash uslubi.
### CompletableFuture nima? Future ning kengaytmasi — asinxron vazifalarni zanjirlash, birlashtirish va callback qo'shish imkonini beradi (Java 8).
### CompletableFuture nima uchun ishlatiladi? Asinxron amallarni deklarativ zanjirlash, parallel birlashtirish va natijani bloklamasdan qayta ishlash uchun.
### CompletableFuture va Future o'rtasidagi farq? Future — faqat `get()` (bloklovchi), zanjirlash yo'q. CompletableFuture — non-blocking callback, `thenApply`, birlashtirish, exception handling.
### CompletableFuture thenApply() nima uchun ishlatiladi? Natija tayyor bo'lganda unga funksiya qo'llab, yangi natija hosil qilish (transform) uchun.
### CompletableFuture thenCompose() nima uchun ishlatiladi? Natijaga asoslanib boshqa CompletableFuture qaytaruvchi amalni zanjirlash (nested future larni tekislaydi — flatMap kabi).
### Singleton Design Pattern nima? Class dan faqat bitta nusxa (instance) bo'lishini ta'minlaydigan pattern; multithread muhitda double-checked locking yoki enum bilan xavfsiz yoziladi.
## 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 result = java.util.concurrent.CompletableFuture
.supplyAsync(() -> 21).thenApply(n -> n * 2);
System.out.println(result.join()); // 42
// Blocking tashqi I/O uchun alohida bounded executor tanlang.
Keng tarqalgan xatolar
- `CompletableFuture` ichidagi exception ni unutish - `exceptionally`/`handle` yozilmasa xato yashirin qoladi.
- Har vazifani Fork/Join ga berish: u faqat bo'linadigan (divide and conquer) ishlar uchun.
Mashqlar
- Ikki asinxron so'rovni `thenCombine` bilan birlashtiring.
- Katta massiv yig'indisini Fork/Join bilan hisoblab, oddiy tsikl bilan solishtiring.
Teglar: pdp, modul-04, nazariya