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

Mashqlar

Teglar: nazariya, modul-04, pdp

Interaktiv ko'rinish (viktorina, izohlar, tarix)