"Hai, Amigo!"

"Ana topik ageng metu ana-Model Memori Jawa. Sejatine, sampeyan ora kudu ngerti bab iku durung, nanging bakal mbiyantu kanggo krungu bab iku."

"Kanggo ngilangi kabeh masalah potensial, Jawa ngganti mekanisme manajemen memori. Saiki memori ora mung dipérang dadi cache lokal thread lan memori global-mekanisme malah luwih apik."

"Lan luwih rumit!"

"Ya, luwih apik lan luwih rumit. Iki kaya montor mabur. Mabur numpak pesawat luwih apik tinimbang mlaku, nanging luwih rumit. Aku bakal nyoba nerangake kahanan anyar kanthi gampang."

"Iki apa padha teka munggah karo. A mekanisme kanggo nyinkronake memori thread lokal, disebut 'kedadeyan-sadurunge', ditambahake menyang kode. Sawetara aturan / kahanan padha nemokke. Nalika kahanan iki wareg, memori diselarasake utawa dianyari kanggo saiki. negara.

"Iki contone:"

dhawuh Utas 1 Utas 2
1
2

101
102
103
104
105

201
202
203
204
205
public int y = 1;
public int x = 1;

x = 2;
synchronized(mutex)
{
 y = 2;
}
Utas ngenteni mutex dirilis

synchronized(mutex)
{
 if (y == x)
 System.out.println("YES");
}

"Salah sawijining kondisi kasebut yaiku akuisisi mutex sing dirilis. Yen mutex dibebasake lan dipikolehi maneh, memori bakal disinkronake sadurunge akuisisi. Utas 2 bakal ndeleng nilai 'paling anyar' saka variabel x lan y, sanajan sampeyan ora nyatakake dheweke ora stabil."

"Carane menarik! Lan ana akeh kahanan iki?"

"Cukup—kene sawetara syarat kanggo nyinkronake memori:"

  • "Ing siji utas, prentah apa wae kedadeyan-sadurunge operasi apa wae sing nderek ing kode sumber."
  • "Release kunci kedadeyan-sadurunge kunci sing padha dipikolehi."
  • "Metu saka blok / metode  sing disinkronake kedadeyan-sadurunge blok / metode sing disinkronake dilebokake ing monitor sing padha."
  • "Panulisan lapangan molah malih kanggo memori mengkono-sadurunge lapangan molah malih padha diwaca saka memori."
  • "A end of a Thread object's run method happens-sadurunge gabung () cara ends utawa isAlive () cara ngasilake palsu ing obyek ing thread padha."
  • "Panggilan menyang cara wiwitan () obyek Thread kedadeyan-sadurunge cara roto () diwiwiti ing obyek ing benang sing padha."
  • "Pungkasan konstruktor kedadeyan-sadurunge wiwitan metode finalize () kelas iki."
  • "A telpon menyang interrupt () cara mengkono-sadurunge thread nemtokake sing cara iki wis disebut, salah siji amarga InterruptedException dibuwang utawa nggunakake isInterrupted () utawa diselani () cara.

"Dadi, kabeh iki rada rumit tinimbang sing dakkira?"

"Ya, rada luwih rumit ..."

"Matur nuwun, Rishi. Aku bakal mikir babagan iki."

"Aja kuwatir babagan topik iki. Bakal tekan wektune sampeyan bakal ngerti kabeh dhewe. Saiki, luwih becik sampeyan ngerti dhasar, tinimbang nyilem menyang alas sing rame. kerja internal mesin Java. Java 9 bakal dirilis lan kabeh bakal diganti maneh."

"O_o. Ya ... Sawetara iku luwih apik kanggo ora ngerti."