JavaRush /Kurslar /All lectures for UZ purposes /Yangi iplarni (threadlarni) yaratish va ishga tushirish

Yangi iplarni (threadlarni) yaratish va ishga tushirish

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo! Elli senga iplar haqida aytdimi, men esa ular bilan qanday ishlash kerakligini aytaman. Yangi ip yaratish uchun:

1) Thread (ip) sinfini yaratamiz

2) Unga bajarilishi kerak bo'lgan metodni uzatayotgan obyektni o'tkazamiz

3) Yaratilgan Thread obyektida start metodini chaqiramiz.

Misol:

Kod Tavsif
class Printer implements Runnable
{
public void run()
{
System.out.println("Men printerman");
}
}
Interfeysi Runnableni amalga oshiradigan sinf.
public static void main(String[] args)
{
Printer printer = new Printer();
Thread childThread = new Thread(printer);
childThread.start();
}
1 Printer sinfidagi obyekt yaratildi, unda run metod mavjud.
2 Yangi Thread sinfidagi obyekt yaratildi, unga konstruktorida printer obyektini uzatdik, uning run() metodi bajarilishi kerak.
3 Yangi ipni ishga tushirdik, start() metodini chaqirish orqali.

Java dasturlaridagi kichik dasturlar odatda bitta ipdan iborat bo'lib, "asosiy ip" (main thread) deb nomlanadi. Ammo kattaroq dasturlar ko'pincha qo'shimcha iplarni ishga tushiradi, ular "qiz iplar" deb ham ataladi. Asosiy ip main metodini bajaradi va tugaydi. Ana shunday main metodiga o'xshash, qiz iplar uchun run metod interfeysi Runnable hisoblanadi.

— Ha, ko'p iplar, ko'p main metodlar.

Yangi iplarni (threadlarni) yaratish va ishga tushirish - 1

— Thread obyektiga qaysi metoddan ish boshlashni ko'rsatish uchun, qandaydir usulda bu metodni ushbu obyektga o'tkazish kerak. Java-da bu Runnable interfeysi yordamida amalga oshiriladi. Bu interfeys bitta abstrakt metodi – void run()ni o'z ichiga oladi. Thread sinfi Thread(Runnable runnable) konstruktorga ega, unga Runnable interfeysi amalga oshirilgan har qanday obyektni o'tkazishingiz mumkin.

Siz o'z sinfingizni Runnable interfeysidan meros qilib olishingiz kerak, so'ngra o'z sinfingizda run metodini o'zgartiring. Aynan ushbu metod chaqirilishi bilan yangi ip ishga tushadi. Run metodda xohlagan narsani yozishingiz mumkin.

Kod Tavsif
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("Men " + this.name);
}
}
Interfeysi Runnable ni amalga oshiradigan sinf.
public static void main(String[] args)
{
Printer printer1 = new Printer("Kola");
Thread thread1 = new Thread(printer1);
thread1.start();

Printer printer2 = new Printer("Vasya");
Thread thread2 = new Thread(printer2);
thread2.start();
}
Har biri o'z Printer turidagi obyektidan asoslangan ikkita ip yaratamiz.
public static void main(String[] args)
{
Printer printer = new Printer("Natasha");

Thread thread1 = new Thread(printer);
thread1.start();

Thread thread2 = new Thread(printer);
thread2.start();

Thread thread3 = new Thread(printer);
thread3.start();
}
Bitta Printer obyektidan asoslangan uchta ip yaratamiz.

Bundan tashqari, barchasini bitta sinfda birlashtirish mumkin. Thread sinfi Runnable interfeysidan meros qilgan, va uni usulni run o' Zgartirish kifoya:

Yangi ip yaratishning ikkinchi usuli
class Printer extends Thread
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("Men " + this.name);
}
}
Thread sinfidan meros oldik, u interfeysi Runnableni amalga oshiradi, va run metodini o'zgartirdik.
public static void main(String[] args)
{
Printer printer = new Printer("Vasya");
printer.start();

Printer printer2 = new Printer("Kola");
printer2.start();

}
O'z Printer turidagi obyektidan asoslangan ikkita ip yaratamiz.

— Bu yechim chiroyliroq.

— Ha, lekin uning kamchiliklari bor:

1) Sizga "Natasha misolidagi" kabi bitta obyekt asosida bir nechta iplarni ishga tushirish kerak bo'lishi mumkin.

2) Agar siz Thread sinfidan meros qilib olgan bo'lsangiz, o'z sinfingizga yana bir ota-sinf qo'sha olmaysiz.

3) Agar sinfingiz ota-sinfga ega bo'lsa, unga ikkinchi sinf - Threadni qo'sha olmaysiz.

— Demak, har bir ip start metodini chaqirgandan so'ng unga konstruktorida uzatilgan obyektning run metodini bajarishga kirishadi?

— Ha. Agar konstruktorda hech narsa uzatilmagan bo'lsa, Thread o'zining ichki run metodini bajaradi.

— Nega bu metodni shunchaki chaqirib bo'lmaydi, masalan, shunday:

Kod
public static void main(String[] args)
{
 Printer printer1 = new Printer("Kola");
 printer1.run();
}

— Asosiy ip run metodi chegsa, bizning "kichik robotimiz", shunchaki ichiga kirib, ichidagi barcha buyruqlarni bajarishga kirishadi, va faqat ularni bajarib bo'lgandan so'ng, main metodiga qaytib, ishni davom ettiradi. Ikkinchi "kichik robotni" yaratish sodir bo'lmaydi, va barcha ish ketma-ket ravishda, emas bir vaqtning o'zida amalga oshiriladi.

— Xo'sh. Yana ikkita ipni chaqirish mumkinmi, run emas?

— Yo'q. Hammasi Runnable interfeysiga bog'liq, va u faqat o'z metodini — run biladi.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION