|
Mavzu: javada oqim modeli
|
bet | 1/13 | Sana | 24.01.2024 | Hajmi | 103,17 Kb. | | #144805 |
Bog'liq adhambek11011107
MAVZU: JAVADA OQIM MODELI
Windows tizimlarida ko’p oqimlilikning “birga/bir” modeli tatbiq qilingan. Har bir oqim quyidagilarni o’zida saqlaydi:
· oqimning identifikatori (thread id);
· registrlar to’plami;
· tizimli va foydalanuvchi protseduralari uchun alohida steklar;
· oqimning lokal ma’lumotlari uchun xotira maydoni (thread-local storage – TLS).
Linux da oqimlar
Linux tizimida oqimlar threads emas tasks (topshiriqlar) deyiladi. Oqimlar clone() tizimli chaqiruvida hosil qilinadi. Ushbu tizim chaqiruvi qism vazifasini ota-vazifa (jarayoni) bilan bir xil manzil maydonini bo'lishishiga imkon beradi.
Javada oqimlar
Yuqorida ta'kidlab o'tilganidek, Java til va asosiy kutubxona darajalarida multithreadingni qo'llab-quvvatlaydigan birinchi dasturiy ta'minot ishlab chiqish platformasi. Java-dagi oqimlarni quyidagi usullar bilan yaratish mumkin:
· Thread sinfining kengaytmasi sifatida
· Runnable interfeysini amalga oshiradigan sinflar sifatida, unda yagona bitta run usuli mavjud - oqimning bajariladigan qismi.
Java dagi oqimlar JVMda boshqariladi. Oqimlar guruhini hosil qilish va shunday guruhlar ierarxiyasini yaratish mumkin.
Java dagi oqimlarning mumkin bo’lgan holatlari 11-rasmda tasvirlangan. OT dagi kabi oqimlar holati Java da ham bir xil bo’lib, yangi holati, keyin-bajarilayotgan holat, wait, sleep turidagi usullar chaqiruvida oqimlar kutish holatiga o’tadi, run usulining yakunlanishi natijasida oqim tugallanish holatiga o’tadi.
Java dasturlash tillida kiritish, chiqarish, fayllar bilan ishlash uchun maxsus sinflar mavjud. Shu sinflar orqali kiritish, chiqarish oqimlari boshqariladi. Kiritish yani dasturga ma’lumot kiritish quyidagi sinflar orqali amalga oshiriladi. Scanner sinfi metodlari Bu sinflada foydalnish uchun uning obekti yaratiladi. Malumotlarnig o’qish uning metodlari orqali amalga oshiriladi. Misol uchun nextInt () metodi- integer tipidagi ma’lumotlarni o’qib olish uchun ishlatiladi. import java.util.Scanner; public class Misol1 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int n=scan.nextInt(); System.out.println(n); } } Fayldan o’qib olishni quyudagi misolda tushunib olishimiz mumkin: import java.io.File; import java.io.FileNotFoundException; 191 import java.util.Scanner; public class Misol2 { public static void main(String[] args) throws FileNotFoundException { File f=new File("input.txt"); Scanner scan=new Scanner(f ); int n=scan.nextInt(); System.out.print(n); } }
07:58
Scanner sinfidagi metodlar 1. next() metodi- string tipidagi ma’lumotlarni o’qib olish uchun ishlatiladi. 2. nextFloat() metodi-float tipidagi ma’lumotlarni o’qib olish uchun ishlatiladi. 3. nextDouble() metodi- double tipidagi ma’lumotlarni o’qib olish uchun ishlatiladi. 4. hasnextInt() metodi- bu metod boolean tipida qiymat qaytaradi va integer tipdagi qiymatni scannerlay olishi yoki olmasligini aniqlaydi. 5. nextLine() metodi- bu metod bitta satrni o’qib olish uchun qo’llaniladi va string tipida qiymat qaytaradi. 6. close()- scannerni tugatish.
Dasturlashda shunday jarayonlar borki, ular parallel hisoblashlarni talab qiladi. Bular parallel algorimtla rorqali yoritiladi. Ushbu jarayonlarni hal qilishda Java dasturiy ta’minotida “Thead” sinfidan foydalaniladi. Ushbu jarayonni amalga oshirish uchun obyektga yo’naltirilgan dasturlash tillarida maxsus sinflar mavjud. Shunday jarayonlarni dasturlash uchun biz java dasturlash tilidagi “Thread” ni ko’rib chiqamiz. Ushbu sinfdan foydalanishni tushunish uchun oddiy ekranga chiqarish masalasini qaraymiz. Yuqoridagi sinfda ikkita oqim yaratilgan. Bu oqimlarni obyekt deb qaraymiz. A obyekt va B obyekt. A obyektni yaratish uchun thread sinfidan foydalanamiz. Bu obyektni yaratishda runnable() obyektidan foydalanamiz. Chunki bu obyektni tarkibida run() metodi mavjud. Bu metodni o’zimiz qayta yozib olamiz. Bu oqim ham huddi shunday yaratiladi. Bu oqimni yaratish uchun shart metodidan foydalanamiz. Ko’p oqimli jarayonlarni tushunish uchun quyidagi masalani qaraymiz.1 chi oqimda 1 dan 100 gacha bo’lgan sonlarni ekranga chiramiz. Masala: 1 chi oqimda 1 dan 100 gacha keyingida 100 dan 300 gacha bo’lgan sonlar ekranga chiqarilsin.
07:02
public class Misol1 { public static void main(String[] args){ Thread a=new Thread (new Runnable() { @Override public void run(){ for(int i=1;i<=100;++i){ System.out.println(i); } } },"A"); System.out.println("--------------"); Thread b=new Thread(new Runnable(){ @Override public void run(){ for(int i=100;i<=300;++i){ System.out.println(i); } } },"B"); a.start(); b.start(); } }
07:03
Ushbu yuqoridagi masalalarni boshqacha ko’rinishda ham tashkil qilish mumkin. Ya’ni alohida sinf qilib tashkil qilish mumkin. Birinchi oqim: public class ThreadA extends Thread implements Runnable { @Override public void run(){ for (int i = 1; i < 100; i++) { System.out.println("Birinchi oqim"); } } } Ikkinchi oqim: public class ThredB extends Thread implements Runnable{ @Override public void run(){ for (int i = 1; i < 100; i++) { System.out.println("Ikkinchi oqim"); } } } Asosiy sinfda ushbu sinflardan foydalanamiz: public class MainClass { public static void main(String[] args) throws InterruptedException { ThreadA e1=new ThreadA(); ThredB p2=new ThredB(); e1.start(); p2.start();
}
}
Java-da oqimni boshqarish va qaysi ko'rsatmalarni bajarish yoki ularni necha marta takrorlash kerakligini aniqlash uchun tuzilgan dasturlash ko'rsatmalari mavjud.
Batafsil kirish tafsilotlari uchun java tarixi sahifasiga tashrif buyuring.
Birinchi nazorat iborasi shartli bo'lib, uning birikma shakli quyida ko'rsatilgan.
|
| |