Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 14222|Svar: 0

[Kommunikation] Insikt i de grundläggande typerna av Java- och I++-trådsäkerhet

[Kopiera länk]
Publicerad på 2015-04-05 22:17:45 | | |

I Java är de andra grundläggande variablerna atomära, förutom de 8-bytes, 64-bitars variablerna Long och Double.


Java-lagringsmodellen kräver att både hämta- och lagringsoperationer är atomära, men för icke-flyktiga långa och dubbla variabler tillåter JVM att dela upp en 64-bitars läs- eller skrivoperation i två 32-bitars operationer.

Om läsning och skrivning sker på olika trådar kan läsning av en icke-flyktig typ long resultera i höga 32 bitar av ett värde och låga 32 bitar av det andra.

Så även om du inte bryr dig om utgången data kan det vara osäkert att använda delade, muterbara långa och dubbla variabler i ett multitrådat program om de inte är deklarerade flyktiga eller skyddade med lås.


När vi talar om atomära operationer betyder det att läsning och skrivning är atomära, såsom i=5; Detta är en atomoperation.

Om dock två atomer utförs samtidigt, är den inte nödvändigtvis atomär, som att först läsa och sedan skriva, då är det möjligt att variabeln har modifierats efter läsning.

i++ är en sådan operation, läs först och skriv sedan, så heltalsvariabeln är atomär, inte att i++ är en atomär operation.

När du använder för(int i=0; i<10000; i++){System.out.print(i)}

Du kommer att märka att jag inte kommer att trycka 10 000 i slutändan, utan trycker ungefär 8–9 tusen.


Men i fallet med multitrådning, även om heltalsvariabeln är atomär, kan det finnas trådsäkerhetsproblem, vilket är ett trådsynlighetsproblem, så du behöver lägga till ett flyktigt sätt.

Denna modifierare är en tvingad variabel som läses från minnet varje gång och inte lagras i register.




Föregående:SQL 2008 ger ett felmeddelande (leverantör: SQL Network Interfaces, fel: 25 - Anslutningsord).
Nästa:[Fast and Furious 7] lanserar 2.12G DVD Den tydligaste versionen på internet
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com