НЕГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Институт Управления и Информатики
Наличие состояния (объекта), доступного для изменения нескольким потокам, требует выработки стратегии синхронизации для сохранения целостности данных во время параллельного выполнения. Такая стратегия подразумевает выбор тина блокировки, подходящего для конкретной ситуации, и установку области видимости (scope) для критической секции.
Использование внутренней блокировки
Внутренняя блокировка может защитить совместно используемое изменяемое состояние разными способами, в зависимости от того, как применяется ключевое слово synchronized:
Ссылка на сайте на объект this при синхронизации на уровне блока кода использует ту же внутреннюю блокировку, что и при синхронизации на уровне метода. Но, применяя эту синтаксическую конструкцию, можно более точно определять границы критической секции, а следовательно, сократить её, включив только тот код, который действительно соответствует защищаемому состоянию. Создание атомарных фрагментов кода большего размера, чем нужно на самом деле, - неудачное решение, поскольку при этом могут быть заблокированы другие потоки без какой-либо на то необходимости, что, в свою очередь, приведет к замедлению выполнения всего приложения.
Синхронизация с помощью внутренних блокировок других объектов позволяет использовать несколько блокировок внутри одного класса. Приложение должно стремиться защитить каждое независимое состояние его собственной, отдельной блокировкой. То есть если в классе имеется более одного независимого состояния, использование нескольких различных блокировок (для каждого состояния) улучшает производительность.
Ключевое слово synchronized может использовать разные внутренние бло- * кировки. Всегда следует помнить о том, что синхронизация на уровне статических методов предполагает установку внутренней блокировки объекта класса, а не экземпляра.