JavaRush /Kurslar /All lectures for UZ purposes /Oqimni to'xtatish: norasmiy versiya

Oqimni to'xtatish: norasmiy versiya

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo! Mana bir qiziqarli savol, bu bilan sen allaqachon duch kelgansan yoki yaqin kelajakda duch kelasan. A qanday qilib ishga tushirilgan oqimni to'xtatish mumkin?

Foydalanuvchi dasturni "internetdan fayl yuklab olish" buyrug'ini berdi, deylik. Asosiy oqim bu vazifa uchun alohida chaqiriq oqimini yaratdi va unga obyektni berdi, uning run metodi faylni yuklab olish uchun zarur bo'lgan barcha harakatlarni o'z ichiga oladi.

A bu yerda foydalanuvchi - bir marta va o'ylab qoldi. U bu faylni yuklab olmoqchi emas. Vazifani qanday bekor qilish va oqimni to'xtatish mumkin?

— Ha, qanday?

— Hech qanday. Bu eng umumiy va eng to'g'ri javob. Oqimni to'xtatib bo'lmaydi, u faqat o'zi to'xtashi mumkin.

Lekin oqimga signal berib, unga biror usulda xabar berishingiz mumkin, endi ish bajarilishi kerak emasligini va uni tugatish kerakligini. Xuddi asosiy oqim main metodidan chiqish bilan birga tugaganidek, chaqiriq oqimini tugatish uchun u run metodini bajarishni tugatishi kerak.

— Va buni eng yaxshi qanday qilish mumkin?

— Siz biror bir o'zgaruvchi, masalan, boolean turidagi o'zgaruvchini yaratishingiz mumkin. Agar u true bo'lsa – oqim ishlaydi. Agar u false bo'lsa – oqim tugashi kerak. Masalan, shunday:

Kod Tavsif
class Clock implements Runnable
{
public void run()
{
while (true)
{
Thread.sleep(1000);
System.out.println("Tik");

if (!ClockManager.isClockRun) return;
}
}
}
Clock (soat) klassi har bir soniyada konsolda "Tik" so'zini abadiy yozadi

Agar ClockManager.isClockRun o'zgaruvchisi false bo'lsa – run metodi tugaydi.

class ClockManager
{
public static boolean isClockRun = true;
public static void main(String[] args)
{
Clock clock = new Clock(); Thread clockThread = new Thread(clock); clockThread.start();

Thread.sleep(10000);
isClockRun = false;
}

}
Asosiy oqim, soatlarni – abadiy ishlashi kerak bo'lgan chaqiriq oqimini ishga tushiradi.

10 soniya kutadi va soatlarni tugatish uchun signal beradi.

Asosiy oqim o'z ishini tugatadi.

Soatlar oqimi o'z ishini tugatadi.

— Agar bizda bir nechta oqim bo'lsa, u holda nima?

— Unda har bir oqim uchun shunday o'zgaruvchi yaratish yaxshiroqdir. Uni klassga qo'shish eng qulay usuldir. Bu yerda boolean isRun o'zgaruvchini qo'shish mumkin. Lekin boolean isCancel o'zgaruvchini qo'shish yaxshiroq, bu topshiriq bekor qilinganida true qiymatini oladi.

Kod Tavsif
class Clock implements Runnable
{
private boolean isCancel = false;

public void cancel()
{
this.isCancel = true;
}

public void run()
{
while (!isCancel)
{
Thread.sleep(1000);
System.out.println("Tik");
}
}
}
Clock (soat) klassi har bir soniyada konsolda "Tik" so'zini yozadi, isCancel o'zgaruvchisi false bo'lsa.

isCancel o'zgaruvchisi true bo'lganda, run metodi tugaydi.

public static void main(String[] args)
{
Clock clock = new Clock(); Thread clockThread = new Thread(clock); clockThread.start();

Thread.sleep(10000);
clock.cancel();
}
Asosiy oqim, soatlarni – abadiy ishlashi kerak bo'lgan chaqiriq oqimini ishga tushiradi.

10 soniya kutadi va cancel metodini chaqirib, topshiriqni bekor qiladi.

Asosiy oqim o'z ishini tugatadi.

Soatlar oqimi o'z ishini tugatadi.

— Bilishga yaxshi, rahmat, Elli.

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