Главная » Java » Синхронизация Java

0

Давайте вспомним рассмотренный в начале главы пример, касающийся обслуживания банковских счетов. Когда двум кассирам (программным потокам) требуется обратиться к одной и той же папке (объекту), существует потенциальная возможность порчи и потери данных. Подобные последовательности взаимно опасных действий принято называть критическими секциями (critical sections),

критическими областями (critical regions). Решение проблемы состоит в синхронизации (synchronization) доступа к критическим секциям. Кассир банка синхронизирует свои действия, помещая в папку закладку, и сам в свою очередь, подчиняется общепринятому соглашению, гласящему, что при наличии закладки использование папки запрещено. В многопоточной программе равнозначный эффект достигается за счет применения механизма блокировки (lock) объекта. Потоки взаимодействуют в соответствии с протоколом, согласно которому любому действию над объектом должно предшествовать приобретение (захват) единоличного права на блокировку объекта. Обладание этим правом предотвращает возможность использования объекта другими потоками до тех пор, пока право

Не будет возвращено потоком-владельцем. Если все сделано правильно, потоки не смогут выполнять единовременные действия, чреватые вмешательством в частные "дела" друг друга.

Каждому объекту ставится в соответствие свойство блокировки, и право доступа к нему может быть приобретено и возвращено посредством методов и инструкций, обозначенных признаком synchronized. Термином синхронизированный код (synchronized code) обозначается любой фрагмент кода, который расположен внутри тела метода или инструкции, помеченных как sуnсhronized.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии