Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
56_Java.pdf
Скачиваний:
210
Добавлен:
18.02.2016
Размер:
2.39 Mб
Скачать

Скачано с сайта http://ivc.clan.su

Механизм блокировки объекта

Эффект синхронизации достигается за счёт применения механизма блокировки (lock). Каждому объекту в Java ставится в соответствие свойство блокировки lock. Lock — специальная переменная в области памяти, выделяемой Java-машиной при создании объекта. Потоки взаимодействуют в соответствии с протоколом, согласно которому любому действию над объектом должен предшествовать захват права на блокировку объекта. Если поток захватил такое право (установил блокировку объекта), то другие потоки не могут использовать объект, пока право не будет возвращено потоком-владельцем, то есть пока блокировка не будет освобождена. Право доступа к блокировке объекта обеспечивается в Java с помощью ключевого слова synchronized.

Использование ключевого слова synchronized гарантирует, что разделяемый ресурс потоков будет одновременно использоваться только одним потоком.

Способы использования ключевого слова synchronized

1.Синхронизированные методы

synchronized тип_возвр_знач имя метода (...)

{

// тело метода

}

При вызове потоком синхронизированного метода соответствующий ему объект (в котором метод определён) блокируется. Никакой другой поток не может вызвать данный метод или какой-либо другой синхронизированный метод, определённый в данном объекте. Несинхронизированные методы могут вызыватся.

2.Оператор synchronized

Можно выполнять синхронизацию только критического участка программы (какого-либо

фрагмента тела метода) с помощью оператора: synchronized (object)

{

// операторы.... (синхронизированный участок кода)

}

где object — ссылка на объект, который необходимо синхронизировать, т.е. с которым одновременно должен работать только один поток.

Один из потоков, войдя в данный критический участок программы, блокирует object. Другой поток не сможет войти в этот участок программы, пока первый поток не завершит работу и не снимет блокировку.

Обратите внимание: объявление synchronized-метода — это просто сокращённая синтаксическая конструкция для описания метода, тело которого заключено внутри synchronized-оператора, использующего для указания на блокируемый объект ссылку this.

Преимущества оператора synchronized:

1. Оператор даёт возможность определения синхронизированного участка кода, охватывающего только некоторый фрагмент тела метода.

Общее правило многопоточного программирования: блокировка должна охватывать как можно более короткий участок кода, так как синхронизация влияет на производительность кода (время вызова синхронизированного метода, например, значительно больше, чем несинхронизированного).

2. Synchronized-оператор позволяет синхронизировать объекты, отличные от this (т.е. от объектов, в которых определены синхронизированные методы), и создавать самые разнообразные схемы синхронизации.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]