"Halo, Amigo! Kita duwe panacea - tamba kanggo kabeh penyakit. Kaya sing wis kita deleng, ngoper benang sing ora bisa dikontrol minangka masalah."
"Yagene benang ora bisa mutusake kapan kudu ngalih menyang thread sabanjure? Apa kabeh sing kudu ditindakake banjur menehi tandha, "Aku wis rampung!"
"Ngidini Utas dhewe kanggo ngontrol ngoper bakal dadi masalah malah luwih gedhe. Upaminipun sampeyan duwe sawetara kode kurang ditulis, lan thread tau nyerah CPU. Mbalik ing dina, iki cara kerjane. Lan iku cukup ngipi elek."
"Oke. Terus piye solusine?"
" Mblokir thread liyane. Iki cara kerjane."
Dadi cetha yen benang saling ngganggu nalika nyoba nggunakake obyek lan/utawa sumber daya sing dienggo bareng . Kaya sing kita deleng ing conto output konsol: ana siji konsol lan kabeh output benang. Ruwet.
Dadi obyek khusus diciptakake: mutex . Iku kaya tandha ing lawang jedhing sing ngandika «kasedhiya / dikuwasani» . Wis rong negara: obyek kasedhiya utawa dikuwasani . Negara-negara kasebut uga disebut "dikunci" lan "dikunci".
Nalika utas mbutuhake obyek sing dienggo bareng karo utas liyane, dheweke bakal mriksa mutex sing ana gandhengane karo obyek kasebut. Yen mutex ora dikunci, benang kasebut ngunci (tandhani minangka «dikuwasani») lan wiwit nggunakake sumber daya sing dienggo bareng. Sawise utas wis rampung, mutex ora dikunci (ditandhani minangka «kasedhiya»).
Yen benang pengin nggunakake obyek kasebut lan mutex dikunci, banjur benang turu nalika ngenteni. Nalika mutex pungkasane ora dikunci dening benang sing manggoni, benang kita bakal langsung ngunci lan wiwit mlaku. Analogi karo tandha lawang jedhing sampurna.
"Dadi carane aku bisa karo mutex? Apa aku kudu nggawe obyek khusus?"
"Iku luwih prasaja saka iku. Pencipta Jawa nggawe mutex iki menyang kelas Obyek. Dadi sampeyan ora kudu nggawe. Iku bagean saka saben obyek. Mangkene carane kabeh bisa digunakake: "
Kode | Katrangan |
---|---|
|
Metode swap ngganti nilai variabel name1 lan name2.
Apa sing bisa kedadeyan yen diarani saka rong utas bebarengan? |
Eksekusi kode nyata | Kode utas pisanan | Kode utas kapindho |
---|---|---|
|
|
|
Garis ngisor |
---|
Nilai saka variabel diganti kaping pindho, bali menyang panggonan asline. |
Pay manungsa waé menyang tembung kunci sing disinkronake .
"Iya, apa tegese?"
"Nalika thread mlebu blok kode sing ditandhani minangka disinkronake, mesin Java langsung ngunci mutex obyek sing dituduhake ing tanda kurung sawise tembung sing disinkronake. Ora ana thread liyane sing bisa mlebu blok iki nganti thread kita ninggalake. Sanalika thread kita metu . blok sing ditandhani disinkronake, mutex bakal langsung dikunci lan bakal kasedhiya kanggo dituku dening benang liyane."
Yen mutex dikuwasani, benang kita bakal mandheg lan ngenteni kanggo mbebasake.
"Dadi prasaja lan elegan. Iku solusi sing apik."
"Iya. Nanging apa sampeyan mikir bakal kelakon ing kasus iki?"
Kode | Katrangan |
---|---|
|
Cara swap lan swap2 nuduhake mutex sing padha ( obyek iki ). |
Apa sing kedadeyan yen siji thread nelpon metode swap lan thread liyane nelpon metode swap2?
"Amarga mutex padha, utas kapindho kudu ngenteni nganti utas pisanan ninggalake blok sing disinkronake. Dadi ora bakal ana masalah karo akses simultan."
"Inggih, Amigo! Kuwi jawaban sing bener!"
Saiki aku pengin nuduhake manawa sinkronisasi bisa digunakake kanggo menehi tandha ora mung blok kode, nanging uga metode. Iki tegese:
Kode | Apa pancene kedadeyan |
---|---|
|
|
GO TO FULL VERSION