Тестовое задание Сбер Java Многопоточность

Sdílet
Vložit
  • čas přidán 16. 07. 2023
  • В этом видео я разбираю решение тестового задания по многопоточности из компании Сбер.
    Стань программистом с www.job4j.ru

Komentáře • 23

  • @divergenny
    @divergenny Před rokem

    спасибо большое

  • @job4j
    @job4j  Před rokem +1

    В этом видео я разбираю решение тестового задания по многопоточности из компании Сбер.
    Стань программистом с www.job4j.ru

    • @Max-wn2gd
      @Max-wn2gd Před rokem +1

      А это на какую позицию? Джун, мидл ?

    • @voynere
      @voynere Před rokem

      ​@@Max-wn2gdмногопоточность уже на Джуна требуют)

    • @job4j
      @job4j  Před rokem

      Думаю, что мидл. От джунов требуют ООП, Коллекции, SQL. А тут все же уже тонкости.

    • @Max-wn2gd
      @Max-wn2gd Před rokem

      @@voynere ну когда я например собесился на джуна, то вопросы (не текстовые) по многопоточке были в некоторых компаниях. Это был 20 год. Да и Джуну всё-таки хорошо бы хоть какую-то базу по этому иметь

  • @mib-1
    @mib-1 Před rokem +3

    хм ... нельзя ссылку на git вставить, коммент удаляется. Небольшой код на основе SynchronousQueue, позволяет добавлять любое количество потоков, выполняющихся по схеме 1,2,3,1,2,3,...

    • @job4j
      @job4j  Před rokem

      Пришли в телеграмм @parsentev

  • @user-tp8ee2wm6r
    @user-tp8ee2wm6r Před 8 měsíci

    нужна ссылка на проект, иначе трудно воспринимать

  • @yeldarnuralin7856
    @yeldarnuralin7856 Před 6 měsíci

    Привет Петр, спасибо. Я попробовал сделать через 2 BlockingQueue, в который один пишет, а другой ждет. Есть еще задачки? ))

    • @_bigbro
      @_bigbro Před měsícem

      например, порнохаб ввел защиту от скачивания файлов и теперь передает m3u8 файлы, который содержит ссылку на segment файл. задача - собрать исходный ролик, путем объединения всех сегментов в mp4 файл.
      ограничения скорость интернета 100кб, у процессора 2 ядра, оперативная память 2Гб. размер сегмента 8кб, а скорость декодировки одного сегмента 20мс.

  • @user-qt6kq8sh8r
    @user-qt6kq8sh8r Před 3 měsíci +1

    а зачем в первом примере в конце join() если он уже в лябде вызова потока? а во второй задаче можно просто преключаться через Semaphore.aquire() / release()

  • @alexandr7686
    @alexandr7686 Před rokem

    почему бы не рассмотреть CyclicBarrier, а вы точно уверены что не volatile флаги всегда будут отрабатывать как надо в syncronized? Может лучше сделать их AtomicBoolean или volatile?

    • @Max-wn2gd
      @Max-wn2gd Před rokem +2

      Переменные в синхронайзд блоке будут ок отрабатывать т.к. такого рода блоки подчиняются правилу "happens before".

    • @job4j
      @job4j  Před rokem

      Попробуйте тоже решить ее. Я посмотрю ваше решение. Давайте вместе.

    • @alexandr7686
      @alexandr7686 Před rokem +1

      @@Max-wn2gd synchronized гарантирует лок но не гарантирует защиту от реордеринга, если я не ошибаюсь. Поэтому нужен volatile

    • @Max-wn2gd
      @Max-wn2gd Před rokem

      @@alexandr7686 а в чем проблема реордеринга ? Просто нужно правильно синхронизировать тот код, кот-ый будет выполняется многими потоками и всё будет ок, т.к. все эти реордеринги будут не видны в других потоках. Если эффект реордеринга виден в другом потоке, то значит, что код некорректно синхронизован

  • @alexnikol6966
    @alexnikol6966 Před 2 měsíci

    AtomicBoolean bFirst = new AtomicBoolean(true);
    ...
    var first = new Thread(() -> {
    int count = 1;
    while (count {
    int count = 1;
    while (count

    • @job4j
      @job4j  Před 2 měsíci

      Возможный вариант, но yield же не гарантирует, что нить переключит контекст.

    • @alexnikol6966
      @alexnikol6966 Před 2 měsíci

      @@job4j пропустит другую. Можно sleep(10) тоже работает

  • @aZaZloKeR
    @aZaZloKeR Před 2 měsíci

    Как то в первой всё усложнено, можно проще: Thread third = new Thread(
    () -> foo.third()
    );
    Thread second = new Thread(
    () -> foo.second()
    );
    Thread first = new Thread(
    () -> foo.first()
    );
    third.start();
    third.join();
    second.start();
    second.join();
    first.start();
    first.join();

    • @foxesfox5870
      @foxesfox5870 Před 4 dny

      😂
      А где тут многопоточность?