Java: Что, во всяком случае, заблокировано синхронизированными методами кроме объекта, которому они принадлежат?

Также вы можете использовать карту,

dt_object = list(map(datetime.date.fromtimestamp, timestamp))
5
задан oxbow_lakes 4 March 2009 в 10:40
поделиться

3 ответа

Стоит выделить понятие "блокировки" и "блокировать объект". Нет никакой реальной идеи "блокировки объекта" - там "получает (и выпускает)", блокировка, связанная с объектом. Да, это кажется, что я придираюсь к мелочам - но различие важно, потому что, если Вы говорите об объекте, заблокированном, он кажется, что никакие другие потоки не смогут изменить что-либо в объекте, в то время как та блокировка сохранена.

Вместо этого это просто означает, что никакой другой поток не сможет получить ту же блокировку, в то время как блокировка сохранена. Нет никакой непосредственной связи между блокировкой и любым содержанием объекта, с которым связана блокировка.

Объявленные методы "синхронизировались", получают блокировку, связанную с экземпляром объекта, которому они принадлежат. Это только делает другие синхронизированные методы для того же объектного ожидания и синхронизированных операторов, которые явно синхронизируют на нем.

Лично мне не нравятся синхронизированные методы - мне нравится делать это более ясным путем явной синхронизации на (частный, окончательный) членская переменная, которая только используется для синхронизации.

10
ответ дан 13 December 2019 в 19:36
поделиться
a.someSyncedMethod(); // this would block ...

Только если Вы отмечаете или метод выполнения с синхронизируемым или сделали, чтобы ThreadA выполнил код в синхронизированных методах.

В JVM каждый объект владеет тем, что известно как монитор. Только один поток может владеть монитором, связанным с данным объектом за один раз. Синхронизируемый средства, которыми Вы говорите, что текущий поток для движения получает монитор перед продолжением.

Также сам класс владеет монитором для статических методов.

1
ответ дан 13 December 2019 в 19:36
поделиться

Значение "блокировки" (на самом деле этот вариант называют монитором) является полностью конвенцией, никакие ограничения доступа не осуществляются.

Функционирование полагается на все объекты, являющиеся хорошего поведения и получающие соответствующую блокировку прежде, чем получить доступ к данным. Только путем инкапсуляции этого желаемого поведения в в классе с надлежащими средствами управления доступом можно осуществить его для объектов клиента.

0
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: