"Hej, Amigo! Vi har et nyt og meget vanskeligt emne. Jeg er ked af det. Det betragtes ofte som et af de mest komplekse emner, ikke kun i Java, men også i programmering generelt. Jeg taler om multithreading . "

Forestil dig et typisk computerspil, for eksempel et rumskibsracerspil. Du flyver gennem kosmos vidder, undviger meteoritter og patruljekrydsere. To dusin andre deltager sammen med dig i disse ulovlige løb.

Lad os sige, at du beslutter dig for at skrive sådan et spil. Dit program skal holde styr på kommandoer (tastaturinput), flytte rumskibene, beregne deres baner, bestemme konsekvenserne af eventuelle kollisioner og tegne alt dette på brugerens skærm. Dette er meget komplekst arbejde.

Kan du huske, hvordan vi løste «problem med stor kompleksitet» i eksemplet om det voksende rederi?

Vi delte det op i uafhængige afdelinger og specificerede (standardiseret), hvordan de kunne interagere.

"Men hvad gør vi, når de uafhængige dele skal udføre noget arbejde parallelt med de andre dele?! Svaret på dette spørgsmål er tråde ."

Prøv at forestille dig et program som en lille robot , der kører rundt i koden og udfører kommandoer . Først udfører den en kommando på én linje, flytter derefter til den næste, og så videre.

"Jeg kan se det i mit sind. Piece of cake!"

"Meget godt. Og forestil dig nu, at du har flere af disse robotter. Mens én håndterer brugerinput, opdaterer en anden objekter baseret på det input. En tredje udfører koden for at vise disse objekter på skærmen. Flere gange i sekundet, en fjerde kontrollerer, om nogen skibe er stødt sammen, og hvis de har kollideret, beregner resultatet af kollisionen."

Vi kan således ikke kun opdele programmet i selvstændige dele/objekter, men også gøre det så disse dele kan udføre deres arbejde uafhængigt af hinanden. Jo mindre interaktion mellem de enkelte dele, jo mindre komplekst er programmet.

Forestil dig, at du var i stand til at erstatte lederen med et script , der sender breve . Og de andre virksomhedsafdelinger var ikke engang i stand til at fortælle, at der var sket en ændring. Den slags skete så tidligt som i det 26. århundrede med fremragende resultater. De fleste ledere, og endda topledere, kan med held erstattes af et manuskript af gennemsnitlig kompleksitet. Først efter at «kontorplanktonforeningen» greb ind, kom massefyringerne af ledere til ophør. Men jeg afviger.

"Hvor interessant!"

"Ikke alene kan der være flere af disse "små robotter", der udfører kode, de kan også kommunikere med hinanden og skabe nye robotter."

"Giv nye robotter?"

"Ja, for at udføre nye opgaver. Nogle gange er det fordelagtigt at oprette en anden robot (en anden tråd) til at udføre en handling samtidig med den nuværende tråd (robot)."

" Det lyder som en god ting, men jeg kan ikke komme i tanke om, hvor jeg ville bruge det. "

Og hvorfor kalder vi dem " tråde "?

"Forestil dig, at hver robot har en forskellig farve og markerer kommandoer med sin farve, mens den udfører dem. Den vej, den lille robot tager, er som den linje, der efterlades af en blyant. Denne sti snor sig bagved robotten, som en tråd bagved . en nål."

Hver «lille robot» har en opgave, som den er skabt til at udføre. Du kan tænke på en tråd er det sæt af kommandoer, der udføres, mens du udfører denne opgave.

Lad os sige, at du flyver på et rumskib for at levere last. Så er «deliver cargo» din opgave, og du er midt i at udføre den. Og din flyvevej er din tråd. Vi kan sige, at hver ny opgave, hver opgave, der endnu ikke er afsluttet, har sin egen tråd (en sti, der stadig skal krydses).

"Der er med andre ord en opgave og en "lille robot", der udfører den. Og en tråd er bare den vej, robotten tager, mens den udfører sin opgave?"

"Nemlig."

Sådan fungerer det hele inderst inde. Fordi computeren kun har én processor, kan den kun udføre én kommando ad gangen. Så her er hvad der sker: Processoren skifter konstant mellem tråde. Den skifter til en ny tråd, udfører et par kommandoer, skifter derefter til den næste tråd, udfører et par kommandoer og så videre. Men da skift mellem tråde sker hundredvis af gange i sekundet, ser det ud til, at alle trådene kører samtidigt.

Multithreading - 1