"Helló, Amigo! Új és nagyon nehéz témánk van. Sajnálom. Nemcsak a Java-ban, hanem általában a programozásban is gyakran tartják az egyik legösszetettebb témának. A többszálú feldolgozásról beszélek. "

Képzeljünk el egy tipikus számítógépes játékot, például egy űrhajós versenyjátékot. A kozmosz kiterjedésein keresztül repülsz, elkerülve a meteoritokat és a járőrcirkálókat. Két tucat másik részt vesz veled ezeken az illegális versenyeken.

Tegyük fel, hogy úgy döntesz, hogy írsz egy ilyen játékot. A programodnak nyomon kell követnie a parancsokat (billentyűzet bevitel), mozgatnia kell az űrhajókat, ki kell számítania a pályájukat, meg kell határoznia az esetleges ütközések következményeit, és mindezt fel kell rajzolnia a felhasználó képernyőjére. Ez egy nagyon összetett munka.

Emlékszel, hogyan oldottuk meg a „nagy bonyolultságú problémát” a növekvő hajózási társaságról szóló példában?

Független részlegekre osztottuk, és mereven meghatároztuk (szabványosítottuk), hogyan tudnak egymással együttműködni.

"De mit tegyünk, ha a független részeknek a többi részekkel párhuzamosan kell munkát végezniük? Erre a kérdésre a válasz a szálak ."

Próbáljon meg elképzelni egy programot egy kis robotként , amely körbefutja a kódot és parancsokat hajt végre . Először egy parancsot hajt végre az egyik sorban, majd a következőre lép, és így tovább.

"Látom az elmémben. Egy szelet tortát!"

"Nagyon jó. És most képzelje el, hogy több ilyen robotja van. Amíg az egyik a felhasználói bevitelt kezeli, a második az objektumokat frissíti a bemenet alapján. A harmadik végrehajtja a kódot, hogy megjelenítse ezeket az objektumokat a képernyőn. Másodpercenként többször, a negyedik ellenőrzi, hogy ütköztek-e hajók, és ha igen, kiszámítja az ütközés eredményét."

Így nem csak önálló részekre/objektumokra bonthatjuk a programot, hanem úgy is elkészíthetjük, hogy ezek a részek egymástól függetlenül végezzék munkájukat. Minél kevesebb interakció az egyes részek között, annál kevésbé bonyolult a program.

Képzelje el, hogy képes volt lecserélni a kezelőt egy leveleket küldő szkriptre . És a vállalat többi részlege sem tudta megállapítani, hogy változás történt. Az ilyesmi már a 26. században megtörtént, kiváló eredménnyel. A legtöbb menedzser, sőt a felsővezetők is sikeresen helyettesíthetők egy átlagos bonyolultságú forgatókönyvvel. Csak az «irodai planktonszakszervezet» közbelépése után ért véget a tömeges vezetői elbocsátások. De elkanyarodok.

"Milyen érdekes!"

"Nemcsak több ilyen "kis robot" hajthat végre kódot, hanem kommunikálni is tudnak egymással és új robotokat szülni."

– Új robotokat szülni?

"Igen, új feladatok végrehajtásához. Néha előnyös egy másik robotot (egy másik szálat) létrehozni, hogy az aktuális szálal (robottal) egy időben valamilyen műveletet hajtson végre."

" Ez jó dolognak hangzik, de nem tudom, hol használnám. "

És miért nevezzük őket " szálnak "?

"Képzeld el, hogy minden robot más színű, és a parancsokat a színével jelöli meg, amikor végrehajtja azokat. A kis robot által megtett út olyan, mint a ceruza által hátrahagyott vonal. Ez az útvonal a robot mögött húzódik, mint egy fonal mögött egy tű."

Minden „kis robotnak” van egy feladata, amelynek végrehajtására készült. Úgy gondolhatja, hogy a szál a feladat végrehajtása során végrehajtott parancsok halmaza.

Tegyük fel, hogy egy űrhajón repülsz rakományt szállítani. Ezután a „rakomány szállítása” az Ön feladata, és már a közepén van annak végrehajtása. És a te repülési útvonalad a fonalad. Úgy is fogalmazhatnánk, hogy minden új feladatnak, minden még be nem fejezett feladatnak megvan a maga szála (egy út, amelyet még be kell járni).

"Más szóval, van egy feladat és egy "kis robot", amely végrehajtja. És egy szál csak az az út, amelyet a robot bejár, amíg elvégzi a feladatát?"

"Pontosan."

Így működik minden mélyen belül. Mivel a számítógépnek csak egy processzora van, egyszerre csak egy parancsot tud végrehajtani. Tehát a következő történik: a processzor folyamatosan vált a szálak között. Átvált egy új szálra, végrehajt néhány parancsot, majd átvált a következő szálra, végrehajt néhány parancsot, és így tovább. De mivel a szálak közötti váltás másodpercenként több százszor történik, számunkra úgy tűnik, hogy az összes szál egyszerre fut.

Többszálú - 1