Oqim 2
Oqim 3
Bloklaydi
Ishlaydi
Blokdan oladi
Объеkt
Blokni ochishga harakat qiladi
Kutadi
Bloklaydi
Ishlaydi
Sinxronlash
Sinxronlangan blok
//Блокируется указанный объект
synchronized (<Ссылка на объект>) {
<Тело блока синхронизации>
}
Sinxronlangan usul
//Блокируется объект-владелец метода
public synchronized void <Имя метода>() {
<Тело метода>
}
Odatdagi xatolar
Sinxronizatsiya yetishmasligi
Obyektlarni uzoq muddatli asossiz blokirovka qilish
O’zaro bloklash (deadlock)
Eksklyuziv(ko’p oqimli) oqimlarning paydo bo'lishi
Hususiyatlarni ratsional bo’linmasligi
Sinf o Object ning maxsus usullari
Har bir ob'ektda kutish oqimlari to'plami mavjud (kutish).
Har qanday oqim istalgan ob'ektning kutish () usuliga qo'ng'iroq qilishi va u uyg'onguncha to'xtab, kutish rejimiga kirishi mumkin
Ob'ektning xabar berish () usuli ob'ektni kutish to'plamidan tasodifiy tanlangan bitta oqimni uyg'otadi
Ob'ektning notifyAll () usuli ob'ektni kutish to'plamidagi barcha oqimlarni uyg'otadi
Class Object usulini qo'llash xususiyatlari
Usulni ob'ektga oqim orqali qo'ng'iroq qilish mumkin, faqat ushbu ob'ektda qulf o'rnatilgandan so'ng
Mavzular, kutish () usulini chaqirganingizdan keyin bajarishni to'xtatmasdan oldin, ularning barcha qulflarini bo'shating
Bo'shatish usulini chaqirgandan so'ng, oqimlar ilgari chiqarilgan qulflarni tiklashga harakat qilishadi.
Oqimlar bo'yicha taqiqlangan harakatlar
Mavzu.suspend (), mavzuga oid
Buzilishlar sonini ko'paytiradi
Thread.stop ()
Foydalanish buzilgan narsalarga olib keladi
Oqimning uzilishi
public void interrupt () oqim holatini to'xtatilgan holda o'zgartiradi
public static boolean interrupted () Qaytish va oqim holatini tozalash (to'xtatilgan yoki yo'q)
public boolean isInterrupted () Oqim holatini qaytaradi (uzilgan yoki yo'q)
Oqim ish paytida uning holatini tekshirishi kerak va agar u uzilib qolsa to'g'ri yopilishi kerak.
Agar oqim "uxlasa"?
Agar hozirgi vaqtda kutish (), uxlash (), qo'shilish () usullari bajarilayotgan bo'lsa va u interrupt () usulini chaqirib to'xtatilsa ...
usul InterruptedException otish bilan tugaydi!
Oqim uzilib qolganligi haqida xabar berilmagan
Bog’lovchi ob'ekt kodiga namuna
public class Keeper {
private Object data;
private boolean gettingData = false;
synchronized public void putData(Object obj)
try {
while(gettingData)
wait();
data = obj;
gettingData = true;
notifyAll();
} catch(InterruptedException e) {
Thread.currentThread().interrupt();
}
}
...
...
synchronized public Object getData()
throws InterruptedException {
while(!gettingData)
wait();
gettingData = false;
notifyAll();
return data;
}
}
Kutish wait() va uxlash sleep() o'rtasidagi farqlar
kutish wait () ob'ektning oqimi tomonidan chaqiriladi, sleep () esa oqim bilan chaqiriladi
kutish wait ()oqimini notifyAll () yoki notify () usullari bilan boshlash mumkin va "uxlab yotgan" ipni "uyg'otib bo'lmaydi"
Kutish wait () sinxron kontekstdan chaqiriladi, lekin uxlash uchun sleep () bu kerak emas
kutish wait () odatda oqim oqim ob'ektga qulfni bo'shatish sharti bilan chaqiriladi.
Foydalanilgan manbalar
Арнолд, К. Язык программирования Java [Текст] / Кен Арнолд, Джеймс Гослинг, Дэвид Холмс. – М. : Издательский дом «Вильямс», 2001. – 624 с.
Вязовик, Н.А. Программирование на Java. Курс лекций [Текст] / Н.А. Вязовик. – М. : Интернет-университет информационных технологий, 2003. – 592 с.
Хорстманн, К. Java 2. Библиотека профессионала. Том 2. Тонкости программирования [Текст] / Кей Хорстманн, Гари Корнелл. – М. : Издательский дом «Вильямс», 2010 г. – 992 с.
Эккель, Б. Философия Java [Текст] / Брюс Эккель. – СПб. : Питер, 2011. – 640 с.
JavaSE at a Glance [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/overview/index.html, дата доступа: 21.10.2011.
JavaSE APIs & Documentation [Электронный ресурс]. – Режим доступа: http://www.oracle.com/technetwork/java/javase/documentation/api-jsp-136079.html, дата доступа: 21.10.2011.
Do'stlaringiz bilan baham: |