Nggunakake sinkronisasi - 1

"Halo, Amigo!"

"Iya, aku kene, aku kene."

"Dina iki, aku bakal ngandhani sampeyan babagan nggunakake sing disinkronake ing praktik."

"Nalika program wis akeh obyek lan Utas, asring kedaden sawetara Utas bisa karo obyek padha bebarengan. Kanthi mengkono, Utas ngganggu saben liyane."

"Iya, aku wis ngerti iki."

"Dadi, umpamane sampeyan duwe obyek sing diakses dening pirang-pirang benang. Sampeyan bisa nindakake rong perkara kanggo ngindhari masalah."

"Kaping pisanan yaiku nggunakake blok sing disinkronake kanggo mbungkus saben lokasi ing ngendi obyek kasebut diakses. Nanging pendekatan iki bisa uga ora bisa digunakake yen sawetara programmer nulis kode sing ngakses obyek kasebut kanthi langsung, tanpa blok sing diselarasake."

"Mulane, pendekatan kapindho digunakake paling akeh wektu - nggawe obyek aman-aman." "Ing tembung liyane, mekanisme sing disinkronake dibangun ing obyek kasebut dhewe: nyatakake metode sing disinkronake lan / utawa mbungkus kode kasebut ing metode kasebut ing blok sing disinkronake."

"Dadi obyek sing bisa digunakake saka macem-macem Utas, lan iki meh kabeh obyek ing program, aku kudu nggawe thread-aman?"

"Secara umum, ya. Ing kasunyatan, ora kabeh obyek ing program digunakake dening benang sing beda-beda, nanging biasane ana akeh. Dadi, nalika sampeyan miwiti nulis kode kanggo thread lan ngakses macem-macem obyek saka iku, banjur karo saben cara nelpon. Sampeyan kudu takon dhewe, "Apa telpon iki aman?"

"Aman?"

"Utas-aman, tegese bisa diarani kanthi aman saka pirang-pirang benang."

"Iki sawetara conto. Upamane sampeyan duwe obyek String sing diakses saka benang sing beda-beda. Kaya sing sampeyan kudu eling, String ora bisa diganti - kaya kabeh jinis primitif liyane. Iki tegese obyek ora owah sawise digawe. Iki tegese mokal kanggo «rusak» obyek kasebut. Kabeh obyek sing ora bisa diganti aman kanggo benang."

"Inggih, sing nggawe luwih gampang."

"Saiki, umpamane sampeyan butuh senar sing bisa diganti."

"Ya, aku elinga. Ana rong jinis senar kasebut: StringBuffer lan StringBuilder. StringBuffer kaya StringBuilder, nanging kabeh cara kasebut disinkronake. Apa uga aman kanggo benang?"

"Ya. Yen sampeyan kudu ngakses obyek StringBuilder saka macem-macem Utas, sampeyan kudu ngganti karo StringBuffer. Yen ora, cepet utawa mengko Utas bakal ngganti bebarengan lan «break» iku."

"Apa yen obyek sing diakses saka macem-macem Utas minangka obyek saka kelasku dhewe? Apa aku kudu nambah sinkronisasi kanggo cara ing kasus iki uga?"

"Ya, luwih becik tindakake aturan iki: kabeh obyek sing bakal diakses saka benang sing beda-beda kudu aman kanggo benang."

"Aku weruh. Aku ora mikir sing kabeh dadi serius. Thanks, Ellie."

"Sampeyan. Muga-muga tips iki bisa mbantu nalika Diego menehi sawetara tugas sing gampang. ☺"