Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14222|Odpověď: 0

[Komunikace] Přehled o základních typech bezpečnosti vláken v Javě a I++

[Kopírovat odkaz]
Zveřejněno 05.04.2015 22:17:45 | | |

V Javě jsou ostatní základní proměnné atomické, kromě 8bajtových 64bitových proměnných Long a Double.


Java storage model vyžaduje, aby operace get i store byly atomické, ale pro nevolatilní dlouhé a dvojité proměnné umožňuje JVM rozdělit 64bitové čtení nebo zápis na dvě 32bitové operace.

Pokud čtení a zápis probíhají na různých vláknech, čtení dlouhého nevolatilního typu může vést k vysokému počtu 32 bitů jedné hodnoty a nízkým 32 bitům druhé.

Takže i když vám na expirovaných datech nezáleží, nemusí být bezpečné používat sdílené, měnitelné dlouhé a dvojité proměnné v vícevláknovém programu, pokud nejsou deklarovány jako volatilní nebo chráněné zámkem.


Když mluvíme o atomových operacích, znamená to, že čtení a psaní jsou atomové, například i=5; Je to atomová operace.

Pokud je však operace dvou atomů prováděna současně, nemusí být nutně atomová, například nejprve čtení a pak zápis, pak je možné, že proměnná byla po přečtení upravena.

i++ je taková operace, nejprve se čte a pak zapisuje, takže celočíselná proměnná je atomická, nikoli že i++ je atomická operace.

Když použijete for(int i=0; i<10000; i++){System.out.print(i)}

Zjistíte, že nakonec nevytisknu 10 000, ale asi 8–9 tisíc.


Ale v případě vícevláknového zpracování, i když je celočíselná proměnná atomická, mohou nastat problémy s bezpečností vláken, což je problém viditelnosti vláken, takže je potřeba přidat volatilní příkaz.

Tento modifikátor je nucená proměnná, která se pokaždé čte z paměti a není uložena v registrech.




Předchozí:SQL 2008 se zobrazí chybovou zprávou (poskytovatel: SQL Network Interfaces, chyba: 25 - Connection word).
Další:[Rychle a zběsile 7] debutuje na DVD 2.12G Nejčistší verze na internetu
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com