Java. Многопоточность. Ключевое слово synchronized

แชร์
ฝัง
  • เผยแพร่เมื่อ 6 เม.ย. 2019
  • Разбираем на примере, как работает ключевое слово synchronized в Java.
    Исходники:
    github.com/Arhiser/java_tutor...
    Поддержать канал💰:
    yoomoney.ru/to/410018856244871
    #ArhiTutorialsJava #ityoutubersru

ความคิดเห็น • 40

  • @IIEPEDO3
    @IIEPEDO3 4 ปีที่แล้ว +8

    Мне очень нравится такой формат: короткие видео с большим количеством информации, без запинок и лишних слов!

  • @Dermidont333
    @Dermidont333 3 หลายเดือนก่อน

    Автор и его канал - находка. Как же все доходчиво. Спасибо.

  • @d.mertsalov
    @d.mertsalov 5 ปีที่แล้ว +4

    Действительно, многопоточность очень важная тема, где легко можно ошибиться. Спасибо!

  • @AutismSpectrumMsk
    @AutismSpectrumMsk 8 หลายเดือนก่อน

    Замечательное видео! Самое понятное из всех просмотренных по теме. Спасибо большое

  • @prosto_komputer
    @prosto_komputer 4 ปีที่แล้ว +4

    👍*Хорошее примечание*, "если все обернуть в синхронайзд, то смысл многопоточности пропадает".
    Благодарю за примеры.

    • @RedkeiGost
      @RedkeiGost 3 ปีที่แล้ว +1

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

  • @Kami911
    @Kami911 2 ปีที่แล้ว +2

    Очень приятное изложение материала. Кратко и по сути.
    Спасибо!

  • @mihailegorin2349
    @mihailegorin2349 3 หลายเดือนก่อน

    Крутое видео)

  • @aRobert
    @aRobert 4 ปีที่แล้ว +1

    Спасибо, простое и понятное ознакомление!

  • @user-fd3pr1sp4z
    @user-fd3pr1sp4z 3 ปีที่แล้ว

    Сказал всё, что нужно. Максимально быстро и понятно. 5+

  • @SvetlanaCapri
    @SvetlanaCapri ปีที่แล้ว

    Спасибо.У Вас понятные примеры.

  • @DevPlayGame
    @DevPlayGame 2 ปีที่แล้ว

    Благодарю, это то что было нужно мне.

  • @yehorlevchenko3540
    @yehorlevchenko3540 4 ปีที่แล้ว +1

    Спасибо, именно в этом видео я получил ответы на свои вопросы

  • @Andrzej3935
    @Andrzej3935 2 ปีที่แล้ว

    Спасибо вам огромное!

  • @locky1827
    @locky1827 ปีที่แล้ว

    Спасибо. Отличное обьяснение.

  • @simplechannel7859
    @simplechannel7859 4 ปีที่แล้ว +4

    Жаль что второй раз подписаться нельзя))))

  • @user-my1by4tq7d
    @user-my1by4tq7d 3 ปีที่แล้ว

    Очень приятно и просто

  • @linuxhooligans2002
    @linuxhooligans2002 4 ปีที่แล้ว

    Мужик респект и уважуха!

  • @java_worm
    @java_worm ปีที่แล้ว

    круто, как же круто ты объясняешь, спасибо

  • @SemyakSD
    @SemyakSD 7 หลายเดือนก่อน

    просто гений, спасибо

  • @Krasnolesye
    @Krasnolesye 2 ปีที่แล้ว

    Спасибо. с монитором - уже что-то прояснилось

  • @gulfstream1800
    @gulfstream1800 2 ปีที่แล้ว

    Если внутри метода run имеется 2 блока синхронизации на разных объектах, первый поток захватывает первый монитор, второй заходит в метод и блокируется, ожидания освобождения монитора, разве не так? (В видео говорится о том, что другой поток захватит монитор другого блока синхронизации)

  • @old-anekdoty
    @old-anekdoty 4 ปีที่แล้ว +2

    Спасибо, но почему даже со стрингбуфером третья строка пустая иногда?

    • @arhitutorials
      @arhitutorials  4 ปีที่แล้ว +8

      Потому что стрингбуфер обеспечивает синхронизацию только внутри своих методов. Но там в Runnable его методы вызываются 3 раза. Между этими вызовами может вклинится другой поток и выполнить свой вызов. То есть, например, пустую строку записать. Тогда получится, к примеру, что на 3-й строке пустая строка, а на четвертой сразу 2 текста. Чтоб всегда было все одинаково нужен synchronized блок на все 3 вызова, тогда другой поток не сможет вмешаться.

  • @jekasol8644
    @jekasol8644 2 ปีที่แล้ว +1

    Доброго времени суток!Подскажите, заинтересовал такой вопрос, ответ на который я так и не нашел.
    java поддерживает многопоточность(имея ввиду пакет java.util.concurrent). Но правильно ли я понимаю что это вид многопоточности с разделением времени, все созданные потоки выполняются в рамках одного процесса и одним ядром процессора. Т.е. когда мы создаем и запускаем подпотоки то все они выполняются "псевдопараллельно", процессор просто перемещается между этими потоками? Но как я понимаю никакой поддержки многопроцессорных систем(многоядерных), здесь нет?
    Так же, в java есть fork/join framework - в котором, насколько я понял , как раз осуществляется реальное многопоточное(многоядерное) программирование.
    Если есть возможность, поясните! Спасибо!

    • @arhitutorials
      @arhitutorials  2 ปีที่แล้ว +1

      Потоки в Java - это надстройка над потоками операционной системы. Они работают параллельно и занимают все свободные ядра.
      fork/join framework предназначен для случаев, когда задачи порождают дочерние задачи. Причем задач много и выполняются они быстро. В этом случае на обычном пуле их выполнять невыгодно, потому что потоки все время будут ломиться в очередь, чтоб добавить туда свои задачи, и большую часть времени будут простаивать в заблокированном состоянии, ожидая доступа к очереди, вместо того, чтоб заниматься работой.

    • @jekasol8644
      @jekasol8644 2 ปีที่แล้ว

      @@arhitutorials Спасибо за развернутый ответ!

  • @vass8180
    @vass8180 3 ปีที่แล้ว +2

    вопрос. если синхронайз по this/ какой обьект лочится? ведь у каждого потока будет свой this и потоки должны одновременно выполнятся?

    • @arhitutorials
      @arhitutorials  3 ปีที่แล้ว

      Синхронайзд используется для синхронизации доступа к какому-то объекту из нескольких потоков. То есть этот объект один для всех потоков, и если внутри его методов есть синхронайзд на this то этот this для всех потоков одинаковый.

    • @vass8180
      @vass8180 3 ปีที่แล้ว

      @@arhitutorials если поток заходит в синхронизированный метод (this) какой обьект находится в этом this?/какой обьект лочится?

    • @arhitutorials
      @arhitutorials  3 ปีที่แล้ว

      @@vass8180 если нет подходящего общего объекта для синхронизации можно его создать.
      Если вызвать синхронайзд метод на объекте, то лочится этот объект.

  • @user-oi4dg9ry8p
    @user-oi4dg9ry8p 3 ปีที่แล้ว

    Чувак, ты топ, объясняешь как Алишев. Дал бы ты рекламу и сделал курс базовый на java, срубил бы бабла на ютабчике :D

  • @baltica_san6047
    @baltica_san6047 2 ปีที่แล้ว +1

    Вопрос. Зачем использовать synchronization в реальной жизни? Если задачи выполняются одна за другой, а не параллельно, разве это всё ещё является МНОГОпоточность? В чем преимущества?

    • @arhitutorials
      @arhitutorials  2 ปีที่แล้ว +3

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

  • @altayski3704
    @altayski3704 ปีที่แล้ว +1

    8 минут половина справочника Шилдта о многопоточности

  • @user-tz3bd3oe3i
    @user-tz3bd3oe3i ปีที่แล้ว

    Добрый вечер, я пока плохо в этом разбирась... Возник вопрос - как мы можем создать объект типа Runnable, ведь Runnable это интерфейс?

    • @arhitutorials
      @arhitutorials  ปีที่แล้ว

      На самом деле создаётся класс без имени, наследующий Runnable, и тут же на месте создаётся экземпляр этого класса, по этому все нормально.

    • @user-tz3bd3oe3i
      @user-tz3bd3oe3i ปีที่แล้ว

      Спасибо большое за ответ

    • @Das.Kleine.Krokodil
      @Das.Kleine.Krokodil ปีที่แล้ว +1

      создается анонимный класс

  • @metasta3a
    @metasta3a 3 หลายเดือนก่อน

    Сори
    Полезно, но музыка дебильная 😀