Расширение раздела замка/монитора/очень важного?

Как это называют, когда критический раздел расширен в функции посетителя или подклассе?

Предположим класс A есть синхронизированные методы m1 и m2

class A {
 public synchronized void m1() {}
 public synchronized void m2() {}
}

И <у кода>, который класс B продлевает , есть метод m3 , который использует оба m1 и m2 и также синхронизирован

class B extends A {
 public synchronized void m3() { 
      ...
      m1();
      ...
      m2();
      ...
 }
}

Это может требоваться, если m3 хочет иметь государство, неизменное между требованиями к m1 и m2 .

Вопрос о терминологии.

Чем это называют?

1
nl ja de

2 ответы

Если есть иерархия замка на потоке выполнения - замки от иерархии называют вложенные замки . Они могут быть переучастником или non-reentrant.

Если отдельные операции ориентированы на многопотоковое исполнение, <сильны> m1() и m2() в этом случае, но последовательности операций, где поток управления зависит от результатов предыдущих операций, могут подвергнуться гонкам данных - это назвало условная потокобезопасность .

1
добавлено

Я уверен, нет особого условия для этой ситуации. Кроме того, я не вижу, где вы на самом деле , расширяют критический раздел в подклассе.

Я думаю, это просто называют "призывом метода суперкласса в новом методе в подклассе" . Ничто иное. Это не о синхронизации.

UPD:

на самом деле то, что вы сделали, является таким кодом:

class B extends A {
 public void m3() { 
      synchronized (this) {
      ...
      synchronized (this) {
          //m1();
          ... m1 source...
      } 
      ...
      synchronized (this) {
          //m2();
          ... m2 source...
      } 
      ...
      }
 }
}

что абсолютно эквивалентно:

class B extends A {
 public void m3() { 
      synchronized (this) {
      ...
          //m1();
          ... m1 source...
      ...
          //m2();
          ... m2 source...
      ...
      }
 }
}

Т.е. внутренняя синхронизация на том же самом объекте в , синхронизированном блок на том же самом объекте - является ненужной и бессмысленной вещью.

0
добавлено
@SuzanCioc I' ve обновил мой ответ. Может быть он, будет более ясным, что я подразумеваю под своим объяснением.
добавлено автор Andremoniy, источник
Жаль, но это о синхронизации. В суперклассе у меня есть 2 маленьких критических раздела, в то время как в подклассе у меня есть больший с меньшими внутри. Т.е. нить находится в критическом разделе в течение более длительного времени.
добавлено автор Suzan Cioc, источник
@Andremoniy это зависит от контракта. Подкласс может поддержать более прекрасные зернистые критические разделы, чем суперкласс или контейнер.
добавлено автор Suzan Cioc, источник
@Andremoniy that' s не верный! Один критический раздел - что-то совершенно различное, чем два меньших (даже без кода, промежуточного их, как в этом примере).
добавлено автор Dariusz, источник
SuzanCioc и @DariuszWawer, если вы, что суперкласс критические разделы, чтобы быть независимыми от подкласса критические разделы, тогда необходимо использовать различные мониторы. При использовании тот же самый монитор, вы ваш пример "это" тогда Andremoniy' s заявления действительно применяются с дополнением, которое звонит в m1 (), и m2() будет заблокирован, в то время как некоторая нить управляет m3 ()
добавлено автор hidralisk, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async