Innehållsförteckning:
Definition - Vad betyder Volatile?
Volatile är ett nyckelord inom java-programmeringsspråket som anger att en medlemsvariabel associerad med en klass kan ändras asynkront av flera trådar. Det flyktiga nyckelordet i koden fungerar som en modifierare när en medlem förklaras. Nyckelord är grundläggande reserverade ord med en tydlig betydelse i sammanhanget för en kompilator.
Det flyktiga nyckelordet används när variabeln anger en slags variabel som är beroende av miljön eller systemet, till exempel enkla räknare och klockor.
Techopedia förklarar Volatile
Det flyktiga sökordet säkerställer att varje läsåtkomst till en medlemsvariabel returnerar det senaste värdet på det. Detta är inte effektivt när de senaste ändringarna görs med en annan tråd. Om en medlemsvariabel inte deklareras som flyktig, kommer en tråd inte att kunna känna igen de ändringar som gjorts på den med en annan tråd.
För en dubbel eller lång medlem säkerställer det flyktiga nyckelordet också att den virtuella maskinen inte genererar två på varandra följande 32-bitarsskrivningar utan skapar bara en 64-bitarsskrivning istället. Om detta inte är möjligt fortsätter JVM-implementeringen att säkerställa atomiciteten hos denna funktion för att den gamla nedre halvan inte kommer att läsas med den nya högre halvan av någon flyktig dubbla eller lång.
Flyktiga skriver och läser inrätta en händelse-före-relation. Innan ett flyktigt objekt nås, sker en synkronisering mellan huvudminnet och de cachade variablerna, precis som det inträffar innan det går in eller efter att ett synkroniserat block har lämnats. Detta innebär att ett flyktigt objekt säkert kan publiceras utan synkronisering; det vill säga när ett flyktigt objekt nås av en tråd uppdateras också medlemmarna i objektet.
När en variabel beskrivs som flyktig utför JVM- och Java-kompilatoren följande två saker.
- Kompilatorn misslyckas med att maximera uttalanden och uttryck relaterade till den variabeln.
- JVM synkroniserar variabeln.
Fördelarna med flyktiga är följande:
- Det är lätt
- Det får en mycket liten omkostnad att läsa och skriva, men är fortfarande snabbare än låsning.
- Flyktiga är resistenta mot döda lås.
