Ако кодът ви е в процес, в който работят няколко нишки едновременно, може да се изпълнява кодът едновременно. Ако резултатът от всяко изпълнение е същият като този на една нишка, а стойностите на другите променливи са същите както се очаква, това е безопасно за нишка. С други думи, интерфейсът, предоставен от клас или програма, е атомарен за нишки или превключването между множество нишки не води до неяснота в резултата от изпълнението на интерфейса, което означава, че не е необходимо да разглеждаме синхронизация. Проблемите с безопасността на нишките се причиняват както от глобални, така и от статични променливи. Ако всяка нишка има само операции за четене на глобални и статични променливи, но няма операции за запис, обикновено тази глобална променлива е безопасна за нишки; Ако няколко нишки извършват операции за четене и запис върху променлива едновременно, обикновено е необходима синхронизация на нишките, в противен случай това може да повлияе на сигурността на нишките.
Целта на заключването е да предотврати едновременни операции при многонишково изпълнение, а обекти от референтния тип заключване позволяват само една нишка да работи едновременно в заключената си зона.
заключването може да заключи само една референтна тип променлива, тоест да заключи адрес
Има разлика между резултатите от бягане с и без заключване:
След заключването: стойността на i ще намалява едно по едно, няма да има скокове, няма повтарящи се изходи, докато стойността е 0;
Няма заключване: изходът на стойността i ще скача, прекъсвайки намаляване, и може също да има изход с -1;
Причина: След добавяне на заключване, само една нишка може да изпълнява кода в заключената област едновременно и двете нишки се изпълняват последователно, така че няма прекъснат изход. |