"Hai, Amigo!"
"Hai, Riska!"
"Aku bakal ngenalake sampeyan menyang kelas Obyek ngenteni , notifikasi , lan metode notifyAll ."
"Dina iki kita mung bakal kenalan karo wong-wong mau, nanging kita bakal bali mengko lan nglampahi wektu liyane ing iki."
"Nggih."
"Cara kasebut diciptakake minangka bagean saka mekanisme sinkronisasi benang."
"Ayo kula ngelingake sampeyan yen Jawa duwe mekanisme sing dibangun kanggo ngontrol akses menyang sumber daya sing dienggo bareng (obyek) saka benang sing beda-beda. Utas bisa nyatakake yen obyek sibuk, lan benang liyane kudu ngenteni nganti obyek sibuk dirilis. "
"Aku elinga. Sampeyan nindakake sing nggunakake tembung kunci sing disinkronake ."
"Bener. Biasane, kode bakal katon kaya iki:"
public void print()
{
Object monitor = getMonitor();
synchronized(monitor)
{
System.out.println("text");
}
}
"Elinga cara kerjane?"
"Yep. Yen loro Utas bebarengan nelpon print () cara, salah siji saka wong-wong mau bakal ngetik pemblokiran labeled diselarasake lan ngunci monitor, kang ndadekake supaya thread kapindho bakal ngenteni nganti monitor dirilis.
"Bener. Sawise thread lumebu ing pamblokiran labeled disinkronake, obyek monitor ditandhani minangka sibuk, lan Utas liyane bakal dipeksa kanggo ngenteni obyek monitor kanggo dirilis. Obyek monitor padha bisa digunakake ing macem-macem bagean saka program. "
“Oalah, kok milih monitor jenenge?”
"Monitor yaiku apa sing biasane sampeyan sebut obyek sing nyimpen status sibuk utawa gratis."
"Lan ing kene cara ngenteni lan ngabari dimainake."
"Satemene, iki mung rong cara. Liyane mung adaptasi saka metode iki."
"Saiki ayo mbungkus sirah babagan cara ngenteni lan kenapa kita butuh. "
"Kadhangkala ana kahanan ing program ing ngendi thread ngetik blok kode sing disinkronake lan ngunci monitor, nanging ora bisa terus amarga ilang sawetara data. Contone, file sing kudu diproses durung rampung ngundhuh utawa kaya ngono."
"Kita mung bisa ngenteni file diundhuh. Sampeyan mung bisa mriksa nganggo loop. Yen file durung diundhuh, banjur turu sedhela utawa luwih, lan mriksa maneh nganti diundhuh."
"Soko kaya iki:"
while(!file.isDownloaded())
{
Thread.sleep(1000);
}
processFile(file);
"Nanging ing kasus kita, jinis tunggu iki larang banget. Wiwit thread kita ngunci monitor, benang liyane uga dipeksa ngenteni sanajan bisa uga duwe data sing dibutuhake."
" Cara ngenteni () diciptakake kanggo ngatasi masalah iki. Cara iki nyebabake benang ngeculake monitor lan banjur «nundha» benang.
"Sampeyan mung bisa nelpon cara ngenteni obyek monitor nalika monitor sibuk, IE mung nang blok diselarasake . Nalika iki kedaden, thread sementara mandheg mlaku, lan monitor dirilis supaya Utas liyane bisa nggunakake."
"Ana asring kedadeyan yen benang bakal mlebu blok sing disinkronake lan nelpon ngenteni, saéngga ngeculake monitor."
"Banjur thread kapindho bakal mlebu lan ditundha, banjur katelu, lan sateruse."
"Lan kepiye carane thread bisa dilanjutake?"
"Kanggo kuwi, ana cara liya: notifikasi."
"Sampeyan mung bisa nelpon cara notify / notifyAll obyek monitor nalika monitor sibuk, IE mung nang blok sinkronisasi . Cara notifyAll wakes munggah kabeh Utas sing nunggu ing obyek monitor iki."
" Metode notifikasi 'membebasake' siji utas acak, nanging metode notifyAll mbebasake kabeh utas «beku» monitor iki."
"Seneng banget. Matur nuwun, Rishi."
"Ana uga adaptasi saka metode wait() :"
metode wait(). | Panjelasan |
---|---|
|
Utas «freezes», nanging kanthi otomatis «unfreezes» sawise ngenteni nomer milliseconds liwati kanggo cara minangka bantahan. |
|
Utas «freezes», nanging kanthi otomatis «unfreezes» sawise nunggu nomer nanoseconds liwati kanggo cara minangka bantahan. |
"Kita uga nelpon iki Enteni karo wektu entek. Cara kerjane kaya Enteni normal, nanging yen wektu tartamtu wis liwati lan Utas durung woken munggah, tangi dhewe."
GO TO FULL VERSION