JavaRush /Kurslar /All lectures for UZ purposes /Ishlashning nozikliklari

Ishlashning nozikliklari

All lectures for UZ purposes
Daraja, Dars
Mavjud

— Salom, Amigo!

Yana bir necha tafsilotlar. Praktik maslahatlar deya olamiz.

Agar sende bir metod bo'lsa, u bir narsani kutib uxlab qolar ekan, shart bajarilmaguncha.

Agar kolleksiya bo'sh bo'lsa, kutamiz
public synchronized Runnable getJob()
{
 if (jobs.size()==0)
  this.wait();

 return jobs.remove(0);
}

Java hujjatlarida metoda waitni siklda chaqirishni juda tavsiya qilishadi:

Agar kolleksiya bo'sh bo'lsa, kutamiz
public synchronized Runnable getJob()
{
 while (jobs.size()==0)
  this.wait();

 return jobs.remove(0);
}

Nima uchun bu kerak. Gap shundaki, shunday uxlab yotgan iplar uchraydi, ularni uyg'otish mumkin, lekin faqat bitta topshiriq olish mumkin. Ipni uyg'otishdi – lekin bu hali shart bajarilgan degani emas!

Umuman olganda, "yolg'on uyg'onishlar" bo'lishi mumkin. Yaxshi dasturchi bu narsani hisobga olishi kerak.

— Tushunarli. Shunda notify dan foydalanganda osonroq bo'lmasmidi?

— Agar ro'yxatda bitta topshiriqdan ko'proq bo'lsa nima bo'ladi? Notify odatda optimizatsiya uchun tavsiya qilinadi. Boshqa hollarda notifyAll metodini ishlatishni tavsiya qilishadi.

— Ok.

— Lekin bu hammasi emas. Birinchidan, kimdir sizning klassingizdan meros olib, o'z metodlarini qo'shib, wait/notifyAll dan foydalangan bo'lishi mumkin. Demak, bir obyekt ustida bir-biridan mustaqil wait/notifyAll mexanizmlari mavjud bo'lishi mumkin. Nima qilish kerak?

— Har doim waitni siklda chaqirish va sikldan chiqish sharti haqiqatan ham bajarilganligini tekshirish!

— To'g'ri. Va shuni tushunib olishingiz uchun, ko'pchilik dasturchilar ayrim iplar o'z-o'zidan uyg'onishi mumkinligini ta'kidlaydi. Tabiiyki, hech kim ularni tasodifan uyg'ota olmaydi. Bu Java-mashinada ishlayotgan kodni optimallashtirish/tezlashtirishning yon ta'siri bo'lishi mumkin.

— Qoyil, tushundim, waitdan oldin sikl muhim ekan.

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