"Hello, Amigo! Kahapon ay tinalakay natin ang mga benepisyo at kaginhawahan ng multithreading. Ngayon ay oras na upang tingnan ang mga disadvantages. At, sa kasamaang palad, ang mga ito ay hindi maliit."

Noong nakaraan, tiningnan namin ang isang programa bilang isang hanay ng mga bagay na tumatawag sa mga pamamaraan ng bawat isa. Ngayon ang lahat ay nagiging mas kumplikado. Ang isang programa ay higit na katulad ng isang hanay ng mga bagay na mayroong ilang "maliit na robot" (mga thread) na gumagapang dito at isinasagawa ang mga utos na nakapaloob sa mga pamamaraan.

Hindi kinakansela ng bagong interpretasyong ito ang una. Mga bagay pa rin sila, at tinatawag pa rin nila ang mga pamamaraan ng isa't isa. Ngunit kailangan nating tandaan na mayroong ilang mga thread, at bawat thread ay gumagawa ng sarili nitong trabaho o gawain.

Ang isang programa ay nagiging mas kumplikado. Binabago ng iba't ibang mga thread ang estado ng iba't ibang mga bagay batay sa mga gawaing ginagawa nila. At nakakatapak sila sa mga daliri ng paa ng isa't isa.

Ngunit ang pinakamasamang bagay ay nangyayari sa loob ng Java machine. Tulad ng nasabi ko na, ang maliwanag na simultaneity ng mga thread ay nakamit sa pamamagitan ng katotohanan na ang processor ay patuloy na lumilipat mula sa isang thread patungo sa isa pa. Lumilipat ito sa isang thread, gumagana sa loob ng 10 millisecond, lumipat sa susunod na thread, gumagana sa loob ng 10 millisecond, at iba pa. At dito nakasalalay ang problema: ang mga switch na ito ay maaaring mangyari sa pinaka hindi angkop na mga sandali. Isaalang-alang ang halimbawang ito:

Code ng unang thread Code ng pangalawang thread
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 ();
Kung ano ang inaasahan naming ipapakita
Si Nick ay 15 taong gulang
Si Lena ay 21 taong gulang
Aktwal na pagpapatupad ng code Code ng unang thread Code ng pangalawang thread
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 ();
Kung ano talaga ang ipinapakita
Si Nick ay  si Lena ay   15  21  taong
gulang

At narito ang isa pang halimbawa:

Code Paglalarawan
class MyClass
{
private String name1 = "Ally";
private String name2 = "Lena";
public void swap()
{
String s = name1;
name1 = name2;
name2 = s;
}
}
Ang paraan ng swap swapang mga halaga ng name1at name2mga variable.

Ano ang maaaring mangyari kung ito ay tinatawag mula sa dalawang mga thread sa parehong oras?

Aktwal na pagpapatupad ng code Code ng unang thread Code ng pangalawang thread
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;
Ang ilalim na linya
Ang parehong mga variable ay may halaga na «Lena».
Ang bagay na «Ally» ay hindi nakarating. Nawala ito.

"Sino ang mag-aakalang posible ang mga error na tulad nito sa isang simpleng operasyon ng pagtatalaga?!"

"Oo, may solusyon ang problemang ito. Pero mamaya na natin pag-usapan - tuyo na ang lalamunan ko."