Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14222|Отговор: 0

[Комуникация] Поглед върху основните типове на сигурност на нишки в Java и I++

[Копирай линк]
Публикувано в 5.04.2015 г. 22:17:45 ч. | | |

В Java другите основни променливи са атомарни, с изключение на 8-байтовите, 64-битови променливи на Long и Double.


Java моделът на съхранение изисква както операциите за получаване, така и за съхранение да са атомарни, но за неволатилни дълги и двойни променливи JVM позволява разделяне на 64-битово четене или запис на две 32-битови операции.

Ако четенето и записването се случват в различни нишки, четенето на неволатилен тип дълъг може да доведе до високи 32 бита от една стойност и ниски 32 бита от другата.

Така че дори и да не ви интересуват изтекли данни, може да не е безопасно да използвате споделени, променливи дълги и двойни променливи в многопоточна програма, освен ако не са обявени за волатилни или защитени с заключване.


Говорейки за атомарни операции, това означава, че четенето и записването са атомарни, като i=5; Това е атомна операция.

Въпреки това, ако операцията на два атома се извършва заедно, тя не е непременно атомарна, например първо четене и след това запис, тогава е възможно променливата да е била модифицирана след четене.

i++ е такава операция, която първо се чете и след това се записва, така че цялочислената променлива е атомарна, а не че i++ е атомарна операция.

Когато използвате for(int i=0; i<10000; i++){System.out.print(i)}

Ще откриете, че в крайна сметка няма да отпечатам 10 000, а ще отпечатам около 8-9 хиляди.


Но в случая с многопоточност, дори ако цялочисловата променлива е атомарна, може да има проблеми със сигурността на нишките, което е проблем с видимостта на нишките, затова трябва да добавите волатилно твърдение.

Този модификатор е принудителна променлива, която се чете от паметта всеки път и не се съхранява в регистри.




Предишен:SQL 2008 подканва с съобщение за грешка (доставчик: SQL Network Interfaces, грешка: 25 - Дума за връзка).
Следващ:[Бързи и яростни 7] дебютира 2.12G DVD Най-ясната версия в интернет
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com