-
Ҳама ҳолатҳои an object кадомҳоянд
Thread
?- НАВ
- ДАВОМ ДОРАД
- БАСТА ШУДААСТ
- ИНТИЗОР
- TIMED_WAITING
- КАТЪ КАРДА ШУД
-
Ҳангоми ворид шудан ба блок ришта ба кадом ҳолат рафта метавонад
synchronized
?- ДАВОМ ДОРАД
- БАСТА ШУДААСТ
Дар RUNNABLE, агар блоки рамзи ишорашударо
synchronized
риштаи дигар ишғол накунад. Дар акси ҳол, риштаи мо ҳолати БЛОКшударо мегирад ва мунтазири баровардани an objectи мутекс мешавад. - Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад
wait()
?Даъват кардани ин усул риштаро дар ҳолати ИНТИЗОР ҷойгир мекунад.
Ин усулроwait()
танҳо дар дохor блок дар an objectи мутекс, ки аз ҷониби риштаи ҷорӣ "қуфл" шудааст, даъват кардан мумкин аст , вагарна усул истиснои IllegalMonitorStateExceptionроsynchronized
мепартояд .Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Вақте ки усул даъват карда мешавадwait()
, риштаи ҷорӣ қулфро аз an object раҳо мекунад ва ба ҳолати ИНТИЗОРӢ дохил мешавад ва мунтазири он аст, ки метод бо риштаи дигарmonitor
даъват шавад . Ҳамин ки ин рӯй медиҳад, ришта бедор мешавад ва агар монитор банд набошад, онро гирифта корашро идома медиҳад. Агар мониторро риштаи дигар ишғол кунад, риштаи ҷорӣ ба ҳолати Блокшуда мегузарад.monitor.notify()
monitor.notifyAll()
-
Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад
Даъват кардани ин усул риштаро дар ҳолати TIMED_WAITING мегузорад.wait(500)
?
Дар муқоиса бо усули онwait()
,wait(timeout)
онро танҳо дар дохor блокsynchronized
дар an objectи мутекс, ки аз ҷониби риштаи ҷорӣ "қуфл (қуфл)" шудааст, даъват кардан мумкин аст.Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
Ҳангоми даъват кардани метод
wait()
, риштаи ҷорӣ қулфро аз an object мебарорадmonitor
ва барои 500 миллисония ба хоб меравад. Объектmonitor
метавонад бо риштаи дигар гирифта шавад.
Пас аз 500 миллисония ришта бедор мешавад ва агарmonitor
банд набуд, онро гирифта корашро идома медиҳад.
Агар мониторро риштаи дигар ишғол кунад, риштаи ҷорӣ ба ҳолати Блокшуда мегузарад.Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Пас азmonitor.wait()
, ришта ба ҳолати интизорӣ мегузарад. Усулеnotify()
, ки бо риштаи дигар дар an object даъват шудааст,monitor
риштаро аз ҳолати ИНТИЗОРӢ ба ҳолати иҷрошаванда интиқол медиҳад, агар an objectи монитор аз ҷониби риштаи дигар гирифта нашавад, дар акси ҳол ба ҳолати БАСТАШУДА. -
Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад
notifyAll()
?notifyAll()
хамаи риштахо «мемонанд». Яке аз ҳама риштаҳои "хоб" (ИНТИЗОР) ба ҳолати RNNABLE мегузарад, монитори an objectи истифодашавандаро мегирад ва кори худро идома медиҳад. Қисми боқимонда дар ҳолати Блокшуда хоҳад буд. Ҳамин ки риштаи аввалини «бедоршавӣ» мониторро, ки ҳама интизори он ҳастанд, мебарорад, сарнавишти он бо риштаи навбатӣ такрор мешавад (риштаи худсарона аз ҳолати БАСТАШУДА ба ҳолати ИДОДАшаванда мегузарад). Ин то он даме, ки ҳамаи риштаҳои "бедоршуда" аз ҳолати БАСТАШУДА хориҷ шаванд, идома хоҳад ёфт. -
Се ришта дар блоки ҳамоҳангшуда
Ду нафари онҳо ба ҳолати БАСТАШУДА, яке ба ҳолати ИДОДАшаванда мегузарандwait()
an objectи mutex номида мешавад. Агар риштаи чорум занг занад, ин риштаҳо ба кадом ҳолат меравандnotifyAll()
? -
Сарфи назар аз он, ки риштаи ҷорӣро ба ҳолати TIMED_WAITING интиқол медиҳад, байни онҳо фарқиятҳои назаррас вуҷуд доранд:join(500)
Он аз чӣ фарқ дорадwait(500)
?join(500)
дар ришта даъват карда мешавад, ки дар дохor блоки ҳамоҳангшуда дар an objectе, ки ин блок ҳамоҳанг карда шудааст, даъват карда мешавад. Ҳангоми даъват, риштаи ҷорӣ 500 миллисонияро интизор мешавад, ки риштае, ки усули он барои анҷомёбӣ даъват шудааст. Ҳангоми даъват, риштаи ҷорӣ қулфро аз an objectи ҳамоҳангшуда раҳо мекунад ва барои 500 миллисония ба хоб меравад. Пас аз 500 миллисония, дар ҳарду ҳолат риштаҳо корро идома медиҳанд.wait(500)
join(500)
wait(500)
join(500)
join()
wait(500)
-
wait(500)
Он аз чӣ фарқ дорадsleep(500)
?sleep(500)
ба ришта даъват карда мешавад,wait(500)
дар дохor блоки ҳамоҳангшуда дар an objectе, ки ин блок дар он ҳамоҳанг карда шудааст, даъват карда мешавад.
Ҳангоми даъват,sleep(500)
риштаи ҷорӣ 500 миллисония интизор мешавад ва баъд кори худро идома медиҳад.
Ҳангоми даъват,wait(500)
риштаи ҷорӣ қулфро аз an objectи ҳамоҳангшуда озод мекунад ва барои 500 миллисония ба хоб меравад. -
Ҳангоми даъват кардани усул ришта ба кадом ҳолат мегузарад
Вақте ки усул даъват карда мешавадyield()
?yield()
, риштаи ҷорӣ "навбати худро мегузаронад" ва java фавран ба иҷрои риштаи навбатӣ мегузарад. Ришта аз давлатrunning
ба давлат мегузарадready
. Ҳолатҳои иҷрошаванда ва омода зердавлатҳои ҳолати RUNNABLE мебошанд.
GO TO FULL VERSION