Лекция 11. Многопоточность в Java

Поделиться
HTML-код
  • Опубликовано: 5 фев 2025
  • Знакомство с языком с самых азов, но глубоко. Преподаватель - Тагир Валеев. Подробнее о курсе: compscicenter....
    Все лекции курса по порядку: • Программирование на Ja...
    Подписывайтесь на наш канал: / compscicenter
    Подробнее о поступлении в CS центр: compscicenter....
    Следите за новостями и анонсами:
    compsci...
    t.me/compscice...
    Поддержать CS центр:
    compscicenter....

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

  • @Николай-х3б4ф
    @Николай-х3б4ф Год назад +5

    Спасибо вам, Тагир. Понравилось, что сперва обсуждаем проблемы , и постепенно решая их приходим к современному подходу)

  • @Николай-х3б4ф
    @Николай-х3б4ф Год назад +5

    Еще понравилось, что лекция дает понимание процессов происходящих в железе. Для меня, например, было открытием, что процессор принимает кеш линию целиком

  • @slavasemushin
    @slavasemushin Год назад +4

    Очень классно! Спасибо!

  • @mikhaildubovskiy8873
    @mikhaildubovskiy8873 Год назад +4

    good video и для сениора норм ))

  • @lisafox9026
    @lisafox9026 Год назад +1

    можно ссылку на исходники?

  • @eugenesmith9940
    @eugenesmith9940 6 месяцев назад

    Интересно, а как мы можем вычитать во 2-м потоке то, что INSTANCE не null?

  • @Das.Kleine.Krokodil
    @Das.Kleine.Krokodil 2 года назад +1

    Спасибо

  • @вапвапвапвапва-ж1и
    @вапвапвапвапва-ж1и 7 месяцев назад

    Видео огонь

  • @John_Smith_Java
    @John_Smith_Java 2 года назад +5

    29:43 Подскажите, пожалуйста, как получить доступ к приватному статическому полу list класса Container?

    • @lordgarrish
      @lordgarrish 2 года назад

      Никак, на то он и приватный.

    • @NIKITry
      @NIKITry 2 года назад

      можно достать через рефлекшн, но это такой себе вариант, т.к. можно поломать всю программу

    • @John_Smith_Java
      @John_Smith_Java 2 года назад

      Ну просто не компилируется🤷‍♂️

    • @АндрейКолосовский-я4р
      @АндрейКолосовский-я4р 2 года назад +5

      @@John_Smith_Java геттер в классе Container создать нужно. тут это упустили для простоты восприятия.

    • @СырокКексик
      @СырокКексик Год назад +1

      @@АндрейКолосовский-я4р скорее всего скрин из класса Container метода main. И обращение было к приватному полю объекта внутри самого класса объекта.

  • @user-zx5sv3hb2u
    @user-zx5sv3hb2u 2 года назад +7

    А есть возможно качество видео улучшить до 1080?

    • @9080artur
      @9080artur Год назад +1

      натренируй нейросеть и залей туда видео)

  • @arturbarkou6347
    @arturbarkou6347 Месяц назад

    Динамика на графиках о процессорах не соответствует тексту лектора 🤔

  • @kotbajan
    @kotbajan 2 года назад +2

    Вопрос не про потоки, а про оптимизацию и перестановки:
    private boolean initialized = false; // not volatile
    private Object obj = null; // not volatile
    public void doIt {
    if (!this.initialized) {
    this.obj = init(); // (1) throw RuntimeException
    this.initialized = true; // (2)
    }
    }
    код однопоточный. Может ли произойти оптимизация и шаг 2 произойдет раньше шага 1?

    • @aanoonymouss
      @aanoonymouss 2 года назад +1

      Зависит от того - связаны обьект и переменная друг с другом. Т.е. если внутри инициализации обьекта есть код, который использует переменную - значит связаны. Если нет - значит не связаны.
      Эту связь будет определять компилятор при сборке кода.
      Если связь есть - компилятор будет гарантировать заданную в коде последовательность выполнения.
      Если связи нет - то действительно да, переменная может стать true раньше, чем инициализация обьекта.
      Но в контексте однопоточной программы - для программиста это не имеет значения, код будет выполняться корректно и так и так.
      В контексте многопоточки - свои ньюансы конечно.
      Это в C++ так. В яве - скорее всего то же самое. Поправьте, если ошибаюсь.
      Забавно, примерная аналогия ситуации в вопросе - "эффект наблюдателя" в квантовой физике :)

    • @kotbajan
      @kotbajan 2 года назад

      @@aanoonymouss , почему корректно в однопоточке? Булево поле установлено, но инициализация по факту не прошла (исключнние). При следующей попытке не произойдет, т.к. проверяется установленное булево поле, а не сам объект.

    • @aanoonymouss
      @aanoonymouss 2 года назад

      @@kotbajan
      По условию - код однопоточный. О каких "при следующей попытке не произойдет" идет речь?
      Правда, несколько раз перечитал сообщение - нихера не понял, о чем ты...
      Перефразируй и поясни плиз

    • @kotbajan
      @kotbajan 2 года назад +1

      @@aanoonymouss , например, шедулер на 1 потоке. Либо вызов одного и того же метода несколько раз в рамках одного алгоритма. Создаем объект, дергаем doIt(), получаем exception (1) и расчитываем, что флаг инициализации (2) не был взведен. Ждем какое-то время и делаем еще одну попытку. Смены потока нет - код однопоточный. Но если оптимизатор поменял местами строки, в this.obj навсегда останется значение по умолчанию.

    • @aanoonymouss
      @aanoonymouss 2 года назад

      @@kotbajan
      Ок, теперь понял.
      Интересный вопрос!
      Подтвердить свои слова не могу - но нутром чую, что исключение не даст выполниться изменению переменной.
      Почему чую - потому что иначе весь наш говнокод перестел бы работать, и самолеты начали бы падать. Но самолеты летают, и код работает так, как мы ожидаем.
      Я плюсовик, но - присоединюсь к вопросу.
      Эй народ - может ли произойти реордеринг между вызовом функции и изменением переменной?
      Как по мне - нет. Потому что реордеринг может быть только между инструкциями, а вызов функции - это новая пачка инструкций?
      edit: для уточнения понимания - в моем ответе стоит заменить "инструкции" на "операции"

  • @ptreeful
    @ptreeful 2 года назад +1

    Вопрос: а есть ли книга, где можно про все это почитать?

    • @dioflok26
      @dioflok26 Год назад +8

      "Java Concurrency in Practice" Брайан Гетц

    • @-maxxxeffect
      @-maxxxeffect Год назад +2

      @@dioflok26 далеко не все описано в этой книге. все же последнее издание от 2004 или 2006 года

    • @EugeneEvdokimov
      @EugeneEvdokimov Год назад +1

      ​@@-maxxxeffectИз этой лекции там есть все

    • @kissloryshy
      @kissloryshy 10 месяцев назад +1

      Семь моделей конкуренции за семь недель

  • @ЛеонидПескин-з7ы
    @ЛеонидПескин-з7ы Год назад +1

    компьютьэры прям режет слух

    • @EugeneEvdokimov
      @EugeneEvdokimov Год назад +2

      а меня скрутило от "доступиться" )