"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 |
---|---|
|
|
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 |
---|---|---|
|
|
|
Kung ano talaga ang ipinapakita |
---|
Si Nick ay si Lena ay 15 21 taong gulang |
At narito ang isa pang halimbawa:
Code | Paglalarawan |
---|---|
|
Ang paraan ng swap swap ang mga halaga ng name1 at name2 mga 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 |
---|---|---|
|
|
|
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."
GO TO FULL VERSION