Asosiy farq – uxlash va Javada kutish
Uyqu va kutish Java-da koʻp ish zarralarini oʻtkazish uchun ishlatiladigan ikkita usuldir. Kutish usuli Thread sinfiga tegishli, kutish usuli esa Object sinfiga tegishli. Java-da uyqu va kutish o'rtasidagi asosiy farq shundaki, uyqu joriy ipning bajarilishini belgilangan millisekundlar uchun to'xtatib turish uchun ishlatiladi, kutish usuli esa joriy ish zarrachasini boshqa mavzu bildirishnoma yoki xabarni chaqirguncha kutishga majbur qilish uchun ishlatiladi. ob'ekt uchun notifyAll usuli.
Trip - operatsion tizimdagi eng kichik ishlov berish birligi. Bu dastur ichidagi boshqaruvning yagona ketma-ket oqimidir. Iplar engil. Multithreading - bu bir vaqtning o'zida bir nechta iplarni ishga tushirish mexanizmi. Java kabi dasturlash tillari ko'p ish zarralarini qo'llab-quvvatlaydi. Multithreading afzalliklarga ega, chunki u bir vaqtning o'zida bir nechta iplarni ishga tushirishga imkon beradi va iplar bir-biridan mustaqildir. Java-da ko'p ish zarralari uchun ishlatilishi mumkin bo'lgan usullar mavjud. Ulardan ikkitasi uxlab yotibdi.
Java-da uyqu nima?
Operatsion tizimda bir nechta jarayonlar ishlaydi. Jarayon bu bajarilayotgan dasturdir. Har bir jarayonda bir nechta iplar bo'lishi mumkin va bu iplar o'rtasida kontekst almashinuvi sodir bo'ladi. Java-da ip yaratishning ikki yo'li mavjud. Ya'ni ip sinfini kengaytirish yoki Runnable interfeysini amalga oshirish orqali. Thread sinfida konstruktorlar va ip ustida amallarni yaratish va bajarish usullari mavjud. Thread klassi Object sinfini kengaytiradi va Runnable interfeysini amalga oshiradi. Runnable interfeysi misollari ish zarrachalari tomonidan bajarilishi mo'ljallangan har qanday sinf tomonidan amalga oshirilishi kerak. Tarmoq bajarilganda, bajarilishi kerak bo'lgan kod ishga tushirish usuli ichida yoziladi. Ishlashi kerak bo'lgan ish zarrachasini ish jadvali moslamasi tanlaydi. Bitta jarayonda faqat bitta ip ishlaydi.
Ip bir necha bosqichdan o'tadi. Thread sinfining ob'ektini yaratgandan so'ng, dasturchi boshlash usulini chaqirishi mumkin. Ushbu usulni chaqirishdan oldin ip yangi holatda deb aytiladi. Mavzuni rejalashtiruvchi ishga tushirish uchun mavzuni tanlaydi. Agar ip hali mavzu rejalashtiruvchisi tomonidan tanlanmagan bo'lsa-da, lekin boshlash usuli chaqirilgan bo'lsa, u holda ip ishga tushadigan holatda. Mavzuni rejalashtiruvchi bajariladigan ipni tanlagandan so'ng, u ishlaydigan holatga o'tadi. Agar ip jonli bo'lsa, lekin hozirda ishga tushirish uchun mos bo'lmasa, u ishlamaydigan yoki bloklangan holatda. Ishlash usuli tugagandan so'ng, ip tugatilgan holatga o'tadi. Bular ipning hayot aylanishining asosiy bosqichlari.
Turli vazifalarni bajarish uchun iplar sinfida turli usullar mavjud. Uyqu usuli usulni ma'lum vaqt davomida uxlash uchun ishlatiladi. Uyqu usuli uchun sintaksisi umumiy bekor uyqu (uzoq millisekundlar) InterruptedException uradi. Bu hozirda bajarilayotgan ish zarrachasini belgilangan millisekundlar uchun vaqtinchalik bajarishni to'xtatishga olib keladi. Agar boshqa ip joriy oqimni to‘xtatsa, bu istisno qilinganda joriy ipning uzilgan holati o‘chiriladi.
01-rasm: Uyqu usuli bilan Java dasturi
Yuqoridagi dasturga ko'ra, ishga tushirish usuli bajarilishi kerak bo'lgan kodni o'z ichiga oladi. Asosiy dasturda ExampleThread1 ning ikkita obyekti yaratiladi va ularda ishga tushirish usullari chaqiriladi. Bu kodni ishga tushirish usuli ichida ishlatish imkonini beradi. Bir vaqtning o'zida faqat bitta ip bajariladi. Ip bilan.uyqu (1000); birinchi ish zarrachasi 1000 millisekund davomida bajarilishini to'xtatishga imkon beradi. Tarmoq uxlab yotganida, ip rejalashtiruvchisi boshqa ipni oladi.
Javada kutish nima?
Bir nechta mavzu umumiy manbaga kirishi mumkin. Bu noto'g'ri chiqishni keltirib chiqarishi mumkin. Mavzu sinxronizatsiyasi umumiy manbaga kirish uchun faqat bitta ipni yaratish uchun ishlatilishi mumkin. Vaziyatni quyidagicha tasavvur qiling. Agar t1 va t2 kabi ikkita oqim mavjud bo'lsa, t1 qiymatlarni Text1.txt deb nomlangan matn fayliga saqlashni boshlaydi. Bu qiymatlar t1 qaytganda boshqa hisob-kitoblar uchun ishlatiladi. Agar t2 t1 qaytishidan oldin boshlansa, t2 t1 tomonidan saqlangan qiymatlarni o'zgartirishi mumkin. Bu t1 ning noto'g'ri chiqishni ta'minlashiga olib kelishi mumkin. Sinxronizatsiya yordamida, t1 Text1.txt faylidan foydalanishni boshlaganda, bu fayl bloklanishi mumkin, shuning uchun unga faqat t1 orqali kirish mumkin. t1 ushbu matn fayliga kirish uchun qulfni chiqarmaguncha t2 uni o'zgartira olmaydi. Vazifa tugagach, t1 qulfni bo'shatishi mumkin. Qulf monitor sifatida ham tanilgan.
Mavzularni sinxronlashtirishga iplar orasidagi aloqa orqali erishish mumkin. Muhim bo'lim - bu umumiy manbalarga kiradigan kod segmenti. Tarmoqlararo aloqada ip o'zining kritik qismida ishlayotganini to'xtatib turadi va bajariladigan o'sha muhim bo'limga boshqa ipga kirishga ruxsat beriladi. U wait, notify va notifyAll usullari yordamida amalga oshiriladi. Ular Object sinfiga tegishli. Kutish usuli joriy ipning qulfni bo'shatishiga ruxsat berish va boshqa mavzu ob'ekt uchun notify yoki notifyAll usulini chaqirguncha kutish uchun ishlatiladi. Xabar berish usuli qulfni kutayotgan bitta ipni uyg'otish uchun ishlatiladi. notifyAll qulfda kutilayotgan barcha mavzularni uyg'otadi.
02-rasm: Kalkulyator sinfi
03-rasm: Asosiy usul
Kalkulyator klassi mavzuni kengaytiradi. Sinxronlashtirilgan blok ishga tushirish usuli ichida. For loop va notify usuli sinxronlashtirilgan blok ichida joylashgan. Asosiy usul ichida, yaratilgan ipning namunasi va start usuli shu misolda chaqiriladi. Asosiy usul mavzu bildirishnoma berguncha kutadi. Dasturni bajarishda asosiy usul ishga tushirish usulining to'liq bajarilishini kutadi va xabar berish usulini kutadi. Xabar berish usuli chaqirilgandan so'ng, asosiy usul kutishni to'xtatadi va kodning qolgan qismini bajarishni boshlaydi. Asosiysi, Kalkulyator mavzusi tugashini kutmoqda. Nihoyat, yig'indining natijasi chop etiladi.
Agar sinxronlashtirilgan blok bo'lmasa va asosiy usulda quyidagi kod bo'lsa, u boshqa oqim tugashini kutmagani uchun chiqishni nolga teng beradi.
Kalkulyator t1=yangi Kalkulyator ();
t1. boshlash ();
System.out.println (t1.sum);
Javada uyqu va kutish oʻrtasidagi oʻxshashlik nimada?
Ham uxlash, ham kutish Java-da koʻp ish zarralarini qoʻllashda foydalanish mumkin boʻlgan usullardir
Javada uyqu va kutish oʻrtasidagi farq nima?
uyqu va Javada kutish |
|
Uyqu usuli joriy oqimni tizim taymerlari va rejalashtiruvchilarning aniqligi va aniqligiga qarab belgilangan millisekundlarda bajarilishini toʻxtatib qoʻyadi. | Kutish usuli joriy ipni boshqa mavzu ob'ekt uchun notify yoki notifyAll usulini chaqirguncha kutishiga sabab bo'ladi. |
Qulf bilan assotsiatsiya | |
Uyqu usuli sinxronizatsiya paytida ob'ektdagi qulfni ochmaydi. | Kutish usuli sinxronizatsiya vaqtida qulfni chiqaradi. |
Ijro etish usuli | |
Uyqu usuli joriy oqimda bajarilgan. | Obyektda kutish usuli chaqiriladi. |
Assotsiatsiyalangan sinf | |
Uyqu - bu Thread sinfining usuli. | Kutish - bu Ob'ekt sinfining usuli. |
Tugallash | |
Uyqu jarayoni belgilangan vaqtdan keyin tugaydi. | Kutish usuli notify yoki notifyAll usullarni chaqirish orqali toʻxtatiladi. |
Xulosa – Javada uxlash va kutish
Operatsion tizimda bir nechta jarayonlar ishlamoqda. Har bir jarayon bir nechta ipga ega bo'lishi mumkin. Ip - bu operatsion tizimda ishlov berishning eng kichik birligi. Java dasturlash tili ko'p ish zarralarini qo'llab-quvvatlaydi. Bu bir vaqtning o'zida bir nechta iplarni ishga tushirishga imkon beradi. Kutish va kutish - bu ko'p ish zarralarini amalga oshirishda ishlatilishi mumkin bo'lgan ikkita usul. Java-da uyqu va kutish o'rtasidagi farq shundaki, uyqu joriy ipning bajarilishini belgilangan millisekundlar uchun to'xtatib turish uchun ishlatiladi, kutish usuli esa joriy ish zarrachasini boshqa ip notify yoki notifyAll ni chaqirmaguncha kutishga majbur qilish uchun ishlatiladi. obyekt uchun usul.