Hvis din kode er i en proces, der kører flere tråde samtidig, kan den køre koden samtidig. Hvis resultatet af hver kørsel er det samme som for en enkelt tråd, og værdierne af andre variable er de samme som forventet, er det trådsikkert. Med andre ord er grænsefladen, som en klasse eller et program leverer, atomar for tråde, eller at skifte mellem flere tråde fører ikke til tvetydighed i udførelsesresultatet af grænsefladen, hvilket betyder, at vi ikke behøver at overveje synkronisering. Trådsikkerhedsproblemer skyldes både globale og statiske variable. Hvis hver tråd kun har læseoperationer for globale variable og statiske variable, men ingen skriveoperationer, er denne globale variabel generelt trådsikker; Hvis flere tråde udfører læse- og skriveoperationer på en variabel samtidig, kræves trådsynkronisering generelt, ellers kan det påvirke trådsikkerheden.
Formålet med låsen er at forhindre samtidige operationer ved multitrådet eksekvering, og objekter af referencetypen af lås tillader kun én tråd at operere ad gangen i sit låste område.
Lock kan kun låse én referencetypevariabel, det vil sige låse en adresse
Der er forskel på resultaterne af at køre med og uden låsning:
Efter låsning: værdien af i vil falde én efter én, der vil ikke være nogen hop, ingen gentagne output, indtil værdien 0;
Ingen lås: værdioutputtet af i vil springe, diskontinuert faldende, og kan også have en værdi af -1 output;
Årsag: Efter at have tilføjet en lås, kan kun én tråd eksekvere koden i det låste område ad gangen, og begge tråde udføres i rækkefølge, så der vil ikke være noget afbrudt output. |