-
Apa kabeh status obyek kasebut
Thread
?- ANYAR
- LUKAS
- diblokir
- NUNGGU
- TIMED_WAITING
- TERMINASI
-
Apa negara sing bisa ditindakake thread nalika mlebu blok
synchronized
?- LUKAS
- diblokir
Ing RUNNABLE, yen blok kode sing ditandhani
synchronized
ora dikuwasani dening benang liyane. Yen ora, utas kita bakal nampa status BLOCKED lan bakal ngenteni obyek mutex dibebasake. - Apa negara sing bakal ditindakake benang nalika nelpon metode kasebut
wait()
?Nelpon cara iki nempatno thread ing negara WAITING.
Cara kasebutwait()
mung bisa diarani ing bloksynchronized
ing obyek mutex sing wis "dikunci" dening benang saiki, yen cara kasebut bakal mbuwang pengecualian IllegalMonitorStateException .Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Nalika cara diaraniwait()
, Utas saiki ngeculake kunci saka obyekmonitor
lan lumebu ing negara TUNGGU, ngenteni cara kasebut diaranimonitor.notify()
threadmonitor.notifyAll()
liyane. Sanalika iki kedadeyan, benang bakal tangi lan yen monitor ora sibuk, bakal dicekel lan terus digunakake.
Yen monitor dikuwasani dening thread liyane, thread saiki bakal pindhah menyang negara BLOCKED. -
Apa negara sing bakal ditindakake benang nalika nelpon metode kasebut
Nelpon cara iki nempatno thread ing negara TIMED_WAITING.wait(500)
?
Kanthi analogi karo metode kasebutwait()
,wait(timeout)
mung bisa diarani ing njero bloksynchronized
ing obyek mutex sing wis "dikunci (dikunci)" dening benang saiki.Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(500); … }
Nalika nelpon metode kasebut
wait()
, benang saiki ngeculake kunci saka obyekmonitor
lan turu nganti 500 milidetik. Obyekmonitor
bisa dijupuk dening thread liyane.
Sawise 500 milidetik, benang bakal tangi lan yenmonitor
ora sibuk, benang kasebut bakal dicekel lan terus digunakake.
Yen monitor dikuwasani dening thread liyane, thread saiki bakal pindhah menyang negara BLOCKED.Apa negara sing bakal ditindakake benang nalika nelpon metode kasebut
notify()
?Object monitor = getMonitor(); synchronized(monitor) { … monitor.wait(); … }
Sawisemonitor.wait()
, thread bakal pindhah menyang negara WAITING. Caranotify()
sing diarani thread liyane ing obyekmonitor
bakal mindhah thread saka negara WAITING menyang negara RUNNABLE kajaba obyek monitor dijupuk dening thread liyane, digunakake kanggo negara BLOCKED. -
Apa negara sing bakal ditindakake benang nalika nelpon metode kasebut
notifyAll()
?notifyAll()
"bakal tetep" kabeh thread. Salah siji saka kabeh "turu" (NUNGGU) Utas bakal pindhah menyang negara RUNNABLE, njupuk liwat monitor saka obyek digunakake lan terus sawijining karya. Liyane bakal ana ing negara BLOCKED. Sanalika utas "tangi" pisanan ngeculake monitor, sing ditunggu-tunggu wong liya, nasibe bakal diulang maneh ing benang sabanjure (ulir sing sewenang-wenang bakal pindhah saka negara BLOCKED menyang negara RUNNABLE). Iki bakal terus nganti kabeh thread "awakened" ninggalake status BLOCKED. -
Telung benang ing blok sing disinkronake sing diarani
Loro saka wong-wong mau bakal pindhah menyang negara BLOCKED, siji menyang negara RUNNABLEwait()
obyek mutex. Apa negara sing bakal ditindakake benang kasebut yen benang kaping papat diaraninotifyAll()
? -
Kepiye bedane
Senadyan kasunyatan sing lanjoin(500)
karowait(500)
?join(500)
bakalwait(500)
nransfer thread saiki kanggo negara TIMED_WAITING, ana beda wujud antarane wong-wong mau:join(500)
disebut ing Utas,wait(500)
disebut nang pemblokiran diselarasake ing obyek kang pemblokiran iki diselarasake.
Yen ditelpon,join(500)
utas saiki bakal ngenteni 500 milidetik kanggo utas sing cara kasebutjoin()
diarani rampung.
Yen diarani,wait(500)
utas saiki bakal ngeculake kunci saka obyek sing disinkronake lan turu nganti 500 milidetik.
Sawise 500 milidetik, ing kasus loro, benang bakal terus bisa digunakake. -
Kepiye bedane
wait(500)
karosleep(500)
?sleep(500)
disebut ing Utas,wait(500)
disebut nang pemblokiran diselarasake ing obyek kang pemblokiran iki diselarasake.
Yen diarani,sleep(500)
utas saiki bakal ngenteni 500 milidetik, banjur nerusake karyane.
Yen diarani,wait(500)
utas saiki bakal ngeculake kunci saka obyek sing disinkronake lan turu nganti 500 milidetik. -
Apa negara sing bakal ditindakake benang nalika nelpon metode kasebut
Nalika cara diaraniyield()
?yield()
, thread saiki "skip giliran" lan java langsung ngalih kanggo nglakokaké thread sabanjuré. Utas pindhah saka negararunning
menyang negaraready
. Negara mlaku & siap minangka substate saka negara RUNNABLE.
GO TO FULL VERSION