"Halo, Amigo! Wingi kita rembugan keuntungan lan penak saka multithreading. Saiki wektune kanggo ndeleng kerugian. Lan, sayangé, padha ora cilik."

Sadurunge, kita ndeleng program minangka sakumpulan obyek sing nyebutake metode siji-sijine. Saiki kabeh dadi luwih rumit. Program luwih kaya sakumpulan obyek sing duwe sawetara "robot cilik" (benang) sing nyusup lan nglakokake perintah sing ana ing metode kasebut.

Interpretasi anyar iki ora mbatalake sing pisanan. Padha isih obyek, lan padha isih nelpon cara saben liyane. Nanging kita kudu ngelingi yen ana sawetara utas, lan saben utas nindakake tugas utawa tugas dhewe.

A program dadi luwih rumit. Utas sing beda-beda ngganti kahanan obyek sing beda-beda adhedhasar tugas sing ditindakake. Lan padha bisa ngidak ing driji sikil siji liyane.

Nanging sing paling awon kedadeyan ing jero mesin Java. Kaya sing wis dakkandhakake, simultanitas benang sing katon ditindakake kanthi kasunyatan manawa prosesor terus-terusan ngalih saka siji benang menyang benang liyane. Ngalih menyang thread, dianggo kanggo 10 milidetik, ngalih menyang thread sabanjuré, dianggo kanggo 10 milidetik, lan ing. Lan ing kene ana masalah: ngalih iki bisa kedadeyan ing wektu sing paling ora cocog. Coba conto iki:

Kode utas pisanan Kode utas kapindho
System.out.print ("Nick is");
System.out.print ("");
System.out.print ("15");
System.out.print ("");
System.out.print ("years old");
System.out.println ();
System.out.print ("Lena is");
System.out.print ("");
System.out.print ("21");
System.out.print ("");
System.out.print ("years old");
System.out.println ();
Apa sing dikarepake bakal ditampilake
Nick 15 taun
Lena 21 taun
Eksekusi kode nyata Kode utas pisanan Kode utas kapindho
System.out.print ("Nick is");
System.out.print ("Lena is");
System.out.print (" ");
System.out.print (" ");
System.out.print ("15");
System.out.print ("21");
System.out.print (" ");
System.out.print (" ");
System.out.print ("years old");
System.out.println ();
System.out.print ("years old");
System.out.println ();
System.out.print ("Nick is");
//other thread is running
//other thread is running
System.out.print (" ");
System.out.print ("15");
//other thread is running
//other thread is running
System.out.print (" ");
System.out.print ("years old");
System.out.println ();
//other thread is running
//other thread is running
//other thread is running
System.out.print ("Lena is");
System.out.print (" ");
//other thread is running
//other thread is running
System.out.print ("21");
System.out.print (" ");
//other thread is running
//other thread is running
//other thread is running
System.out.print ("years old");
System.out.println ();
Apa sing bener ditampilake
Nick punika  Lena   punika 15  21  taun

Lan iki conto liyane:

Kode Katrangan
class MyClass
{
private String name1 = "Ally";
private String name2 = "Lena";
public void swap()
{
String s = name1;
name1 = name2;
name2 = s;
}
}
Metode swap swapnilai-nilai lan name1variabel name2.

Apa sing bisa kedadeyan yen diarani saka rong utas bebarengan?

Eksekusi kode nyata Kode utas pisanan Kode utas kapindho
String s1 = name1; //Ally
name1 = name2; //Lena
String s2 = name1; //Lena(!)
name1 = name2; //Lena
name2 = s1; //Ally
name2 = s2; //Lena
String s1 = name1;
name1 = name2;
//other thread is running
//other thread is running
name2 = s1;
//other thread is running
//other thread is running
//other thread is running
String s2 = name1;
name1 = name2;
//other thread is running
name2 = s2;
Garis ngisor
Loro-lorone variabel duwe nilai «Lena».
Objek «Ally» ora bisa ditindakake. Wis ilang.

"Sapa sing bakal ngira yen kesalahan kaya iki bisa ditindakake kanthi operasi tugas sing prasaja?!"

"Ya, masalah iki duwe solusi. Nanging kita bakal ngomong babagan iki mengko - tenggorokanku garing."