Grokking The Java Developer Interview: More Than 200 Questions To Crack The Java, Spring, SpringBoot & Hibernate Interview


Question 77: Why wait(), notify(), notifyAll()



Download 7,31 Mb.
Pdf ko'rish
bet57/89
Sana21.04.2022
Hajmi7,31 Mb.
#571320
1   ...   53   54   55   56   57   58   59   60   ...   89
Bog'liq
Grokking-The-Java-Developer-Interview-More-Than-200-Questions-To-Crack-The-Java -Spring -SpringBoot-

Question 77: Why wait(), notify(), notifyAll()
methods must be called from synchronized block
Answer: these methods are used for inter-thread communication. So,
a wait() method only makes sense when there is a notify() method
also.
If these methods are not called from a synchronized block then
IllegalMonitorStateException will be thrown
Race condition can occur


Let’s first look at the IllegalMonitorStateException:
WaitDemo.java:
Output:
Now, let’s understand how a race condition can occur:
Producer-Consumer problem : The problem describes two
processes, the producer and the consumer, who share a common,
fixed-size buffer used as a queue. The producer's job is to generate
data, put it into the buffer and start again. At the same time, the
consumer is consuming the data (i.e. removing it from the buffer),
one piece at a time. The problem is to make sure that the producer
won't try to add data into the buffer, if it's full and that the consumer
won't try to remove data from an empty buffer.
The solution for the producer is to either go to sleep or discard data if
the buffer is full. The next time the consumer removes an item from


the buffer, it notifies the producer, who starts to fill the buffer again.
In the same way, the consumer can go to sleep if it finds the buffer
empty. The next time the producer puts data into the buffer, it wakes
up the sleeping consumer.
Pseudo code:
How the race condition problem can occur:
Suppose, a thread has called the consume() method and it finds that
the buffer is Empty
Now, just before the wait() method is called, another thread calls
produce() and adds an item to the buffer and calls notify()
And The first thread calls the wait() method. In this case, notify() call
by the second thread will be missed
if by any chance, produce() method is not called then the consumer
thread will be stuck in waiting state indefinitely, even though there is
data available in the buffer.


The solution to above problem is using synchronized method/block
to make sure that notify() is never called between the condition
isEmpty() and wait()

Download 7,31 Mb.

Do'stlaringiz bilan baham:
1   ...   53   54   55   56   57   58   59   60   ...   89




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish