"Halo, Amigo!"
"Kita bakal miwiti topik anyar: utas."
"Ayo miwiti. Dina iki kita bakal nliti negara sing obyek Thread liwat (utawa bisa liwat) nalika thread mlaku.
"Saiki bisa diarani pirang-pirang negara, Amigo?"
"Loro. Kapisan iku thread sadurunge wiwitan () cara disebut: obyek ana, nanging Utas durung aktif. Lan kaloro sawise wiwitan () cara wis disebut: nalika Utas nindakake soko. penting."
"Sampeyan bener - ana bedane. Negara-negara iki diarani anyar lan mlaku , nanging mung wiwitan."
"Kaping pisanan, ing sawetara titik thread bakal rampung mlaku, sing tegese bisa uga ana kahanan ing ngendi obyek Thread ana, nanging benang ora ana ing negara anyar utawa mlaku. "Kahanan iki, ing ngendi benang wis rampung mlaku, diarani dipungkasi ."
"Nanging ana liyane. Aja lali yen ing sembarang wektu tartamtu mung siji utas sing bener mlaku. Sing katon minangka karya simultaneous iku bener prosesor terus mlumpat saka thread kanggo thread. Ana negara kapisah nalika thread misale jek dadi. mlaku, nanging bener-bener ngenteni giliran: diarani siap-siap . Nalika utas dianggo, benang kasebut terus-terusan ngalih saka mlaku dadi siap , banjur bali mlaku nalika aktif maneh."
"Sanalika sawise wiwitan () cara disebut, Utas diutus status siap kanggo mbukak lan diselehake ing dhaftar sambungan Utas sing JVM ngalih antarane."
"Ora angel banget. Sadurungé mlaku, ana kahanan anyar . Sawisé rampung, mandheg . Nalika mlaku, benang kasebut mlaku ; banjur nalika ngenteni, wis siap . ."
"Singkatmu apik tenan, nanging sampeyan bener."
"Nanging ana liyane. Utas bisa diblokir. Contone, nalika sampeyan ngetik blok sing disinkronake . Yen thread tekan blok kode sing ditandhani minangka disinkronake lan thread liyane nggunakake, banjur thread kita bakal mlebu ing negara sing diblokir lan bakal ngenteni. supaya mutex (kunci) obyek dibebasake."
"Mangkene kepiye kahanan iki karo negara:"
"Nanging ana liyane. Ana uga negara kapisah disebut nunggu . Iki nalika thread ora diblokir , nanging uga ora siap . Contone, nalika sampeyan nelpon gabung () cara ing thread liyane."
Nalika kita nelpon gabung () ing obyek Utas liyane, kaya thread kita «gabung», nanging ing kasunyatan iku mung ngenteni thread liyane rampung.
"Kajaba iku, ana uga Enteni () cara (saka Enteni / notifikasi / notifyAll trio saka cara), kang ngalih thread kanggo negara nunggu nalika disebut."
"Wah."
"Ngenteni sedhela! Isih ana liyane. Utas bisa turu kanthi nelpon metode turu, umpamane. Ana uga negara sing kapisah kanggo iki. Iki diarani «tunggu wektune». « nunggu wektune » tegese thread nunggu soko kanggo wektu winates. Yen sampeyan nelpon cara ngenteni karo parameter, kayata ngenteni (wektu entek) utawa gabung (wektu entek), banjur thread bakal mlebu ing wektu-tunggu status."
"Iki diagram lengkape:"
"Hmm. Apa kabeh? Utawa ana 10 negara liyane menarik?"
"Saiki, wis."
"Ing laku, sampeyan mung bisa ngelingi diagram pisanan. Iku luwih prasaja. Nanging sing kapindho luwih akurat."
"Aneh, ana akeh diagram negara Thread ing Internet, lan kabeh beda."
"Mulane aku menehi sampeyan diagram iki - sing paling lengkap lan bener."
"Ing diagram iki, negara siap lan mlaku digabungake ing blok siji sing diarani runnable. Apa sampeyan ngerti kenapa?"
"Ora. Iki pisanan aku weruh sing kaya ngono."
" Kelas Utas duwe kelas njero sing diarani Negara , uga metode getState () Negara umum .
public enum State
{
NEW,
RUNNABLE,
BLOCKED,
WAITING,
TIMED_WAITING,
TERMINATED;
}
"Sampeyan bisa tansah nelpon getState () cara ing obyek Thread , lan mangerteni negara saiki. Lan, mesthi, iku bakal dadi salah siji saka nilai enum State.
"Aku weruh. Dadi, negara nyata nang JVM, nanging ana uga negara sing bisa ngakses liwat kode Jawa nggunakake State getState () cara.
"Lan ing kahanan apa aku bakal nggunakake?"
"Paling kamungkinan, ora tau."
"Nanging sampeyan kudu ngerti apa sing ana ing njero benang. Yen ora, sampeyan bakal duwe akeh kewan omo, lan sampeyan ora bakal bisa ngira apa sing nyebabake."
"Plus, juragan seneng takon bab negara Thread sak Interview."
GO TO FULL VERSION