4-modul · 1-dars: Multithreading · Threads · Lifecycle
Daraja: O'rta
Multithreading · Threads · Lifecycle. Multithreading va I/O bo‘yicha nazariya, amaliy namuna va mustaqil mashq.
Tushuntirish
## Dars maqsadi Multithreading · Threads · Lifecycle tushunchalarini farqlash, nima uchun kerakligini izohlash va kichik misolda qo‘llash.
## Nazariya Bir vaqtning o'zida bir nechta vazifa (task) ni bajarish — OS darajasida (process yoki thread orqali).
Multitasking — ko'p process/task (og'irroq, alohida xotira). Multithreading — bitta process ichida ko'p thread (yengil, umumiy xotira).
## Intervyuga tayyorgarlik ### Multitasking nima? Bir vaqtning o'zida bir nechta vazifa (task) ni bajarish — OS darajasida (process yoki thread orqali).
### Multitasking va Multithreading o'rtasidagi farq? Multitasking — ko'p process/task (og'irroq, alohida xotira). Multithreading — bitta process ichida ko'p thread (yengil, umumiy xotira).
### Concurrency nima? Bir nechta vazifani (bir vaqtda emas, navbatma-navbat almashinib) «birga» bajarilayotgandek boshqarish.
### Thread nima? Process ichidagi eng kichik bajarilish birligi («yengil process»); umumiy xotirani bo'lishadi.
### Process nima? Ishga tushirilgan dastur nusxasi; o'z alohida xotira maydoniga ega.
### Thread va Process o'rtasidagi farq? Process — mustaqil, alohida xotira, og'ir. Thread — process ichida, umumiy xotira, yengil va tezroq almashadi.
### Java-da necha xil usulda thread yaratish mumkin? Asosan 2: `Thread` class dan meros olib (`run()` override), yoki `Runnable`/`Callable` implement qilib. Shuningdek Executor va lambda orqali.
### Runnable nima? `run()` methodli functional interface — thread bajaradigan vazifani ifodalaydi.
### Threadni Runnable bilan yaratgan yaxshimi yoki Thread class orqalimi? Runnable afzal — Java single inheritance, Runnable bilan boshqa class dan ham meros olish mumkin va vazifa/thread ajratiladi.
### Thread class-ning join() methodi nima uchun ishlatiladi? Bir thread boshqasi tugashini kutishi uchun (chaqiruvchi thread bloklanadi).
### Thread class-ning stop() methodi nima uchun ishlatiladi? Thread ni majburan to'xtatish — lekin deprecated: xavfli (monitorlarni ochib yuboradi), ishlatilmasligi kerak.
### Thread class-ning getState() methodi nima uchun ishlatiladi? Thread ning hozirgi holatini (NEW, RUNNABLE, BLOCKED, WAITING...) olish uchun.
### Thread classning yield() methodi nima qiladi? Joriy thread protsessorni boshqa (teng ustuvorlikdagi) threadga berishga «maslahat» beradi (kafolatsiz).
### Java-da 2 thread o'rtasida ma'lumot qanday almashadi? Umumiy (shared) obyekt/o'zgaruvchilar orqali; `wait()/notify()`, `BlockingQueue` yoki thread-safe strukturalar bilan sinxronlanadi.
### Threadning life cycle-ini tushuntiring. NEW (yaratilgan) → RUNNABLE (tayyor/ishlayapti) → BLOCKED/WAITING/TIMED_WAITING (kutish) → TERMINATED (tugagan).
### sleep() va wait() methodlari o'rtasidagi farq? `sleep()` — Thread ning static methodi, qulfni (lock) ushlab turadi, belgilangan vaqt kutadi. `wait()` — Object methodi, qulfni bo'shatadi, `notify()` gacha kutadi, synchronized ichida chaqiriladi.
### Threadning state qachon RUNNABLE ga o'zgaradi? `start()` chaqirilganda (NEW dan) yoki kutishdan/bloklanishdan qaytganda.
### Threadning state qachon DEAD ga o'zgaradi? `run()` methodi tugaganda yoki tutilmagan exception bilan to'xtaganda (TERMINATED).
### Threadni o'chirishimiz mumkinmi? Qanday? To'g'ridan «o'chirish» yo'q; `interrupt()` bilan signal berib, flag (`volatile boolean`) yoki `isInterrupted()` orqali `run()` ni chiroyli yakunlaymiz.
### Thread class currentThread() methodi nima uchun kerak? Kodni bajarayotgan joriy thread obyektiga havola olish uchun.
### Daemon thread qanday thread? Fon (background) xizmat threadi; barcha user threadlar tugasa, JVM daemon larni to'xtatib chiqib ketadi (masalan GC).
### Daemon thread qachon foydalaniladi? Fon vazifalari uchun (monitoring, tozalash, GC) — asosiy ish tugasa kutish shart bo'lmagan ishlarga.
### Thread priority nima? Thread ustuvorligi (1–10); scheduler ga qaysi thread ni afzal ko'rish haqida maslahat (kafolat emas).
### Yuqori va past prioritetli threadlar o'rtasidagi farq? Yuqori prioritetli thread ko'proq CPU vaqti olish ehtimoli yuqori, lekin bu kafolat emas — OS scheduler ga bog'liq.
## 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
Thread worker = new Thread(() -> System.out.println("Ish"));
worker.start();
worker.join(); // InterruptedExceptionni main throws yoki catch bilan boshqaring.
System.out.println(worker.getState());
Keng tarqalgan xatolar
- Thread ni `start()` o'rniga `run()` bilan chaqirish - u yangi thread ochmaydi, oddiy metod bo'ladi.
- Thread lar tartibi kafolatlangan deb o'ylash - rejalashtirish JVM va OS ixtiyorida.
Mashqlar
- Ikkita thread bir vaqtda chop etsin va natijani bir necha marta ishga tushirib solishtiring.
- `join()` qo'shib, natija tartibi qanday o'zgarishini ko'rsating.
Teglar: nazariya, modul-04, pdp