Это бриллиант из мира видео про программирование. Мало кому удается настолько подробно объяснить тяжелые темы доступным способом, без воды, и с максимальным количеством примеров, браво!
@EugeneSuleimanov8 ай бұрын
Большое спасибо за отзыв!
@sample_camper9 ай бұрын
Последовательная, структурированная подача. На одном дыхании смотрится, спасибо!
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв!
@Overlap_ed8 ай бұрын
Это лучшее видео про многопоточность!!!!
@EugeneSuleimanov8 ай бұрын
Большое спасибо за отзыв!
@Devivl8 ай бұрын
Женя, большое спасибо за экспертизу! Очень приятно слушать тебя. Без воды, чётко и с примерами на экране. Такие знания продают, а ты делишься ими безвозмездно. Это просто не передать словами. Огромное человеческое спасибо.
@EugeneSuleimanov8 ай бұрын
Большое спасибо за поддержку!
@dozory49 ай бұрын
Готовлюсь к собеседованиям, как раз изучаю тему многопоточности, и тут такое видео от Евгения. Коммент пишу до просмотра, потому что знаю, будет топ!
@EugeneSuleimanov9 ай бұрын
Спасибо за комментарий и удачи на собеседовании :)
@sergeyplatoshin24129 ай бұрын
Лучшее объяснение что я видел, спасибо!
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв!
@IgorNovikov-c5o2 ай бұрын
Евгений это невероятно крутой формат. Понятно что подготовка к такому ролику потребовала большого количества времени. Спасибо вам огромное. Если сможете - запишите пожалуйста похожее видео по дженерикам.
@EugeneSuleimanovАй бұрын
Большое спасибо за отзыв!
@МаринаКоткина-м5м8 ай бұрын
Супер подача материала, и сам материал - все основы по многопоточности в одном видео 🔥 Спасибо большое!
@EugeneSuleimanov8 ай бұрын
Спасибо за отзыв!
@Rus_ITАй бұрын
Не ожидал увидеть настолько классный материал. Теперь нужно посмотреть остальные ваши видеоролики. Спасибо большое! 🔥
@delalen80125 ай бұрын
Спасибо за видео! Секции с самопроверкой полезные, лучше материал запоминается
@EugeneSuleimanov5 ай бұрын
@@delalen8012 спасибо за отзыв и поддержку!
@AnatolShalobas7 ай бұрын
Огромное спасибо за видео. Увидел небольшую недоработку хотел бы указать на нее. К сожалению на 29:59 некорректный пример для наглядного показа как работает синхронизация для двух разных счетчиков. Проблема которую я тут вижу в том, что вы в разных потоках, инкрементируете (пусть и потоконебезопасно) разные счетчики. Т.е. даже теоретически они не смогут повлиять друг на друга, а следовательно будут выводиться всегда верно. Даже если не будут синхронизированы.
@EugeneSuleimanov7 ай бұрын
Большое спасибо за отзыв и замечание. Здесь больше упор был на введение в мьютексы, но я должным образом не акцентировал на этом внимание, поэтому этот пример вызывает недоумение. Еще раз спасибо!
@AnatolShalobas7 ай бұрын
@@EugeneSuleimanov вам огромное спасибо за контент!
@Andre-h205 ай бұрын
Аналогично, пример вызвал непонимание, зашел, чтобы написать комент, но уже увидел. Евгений, спасибо за объяснение
@edmond-dantes-17968 ай бұрын
Комментарий в поддержку канала. Очень качественная и хорошо структурированная подача. Можно использовать как лекции для новичков)
@EugeneSuleimanov8 ай бұрын
Большое спасибо за поддержку!
@ДмитрийПавленко-н5ч8 ай бұрын
Евгений, спасибо вам за ваш труд! Очень полезное видео👍
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@zarazaEye6 ай бұрын
Спасибо большое за видео. Есть небольшое предложение, основанное на книге "Эффективное обучение". Как правило, все вопросы самоконтроля относятся к пройденной части - это Ок. Но для системного усвоения, можно включать до секцию с парой-тройкой вопросов из предыдущих блоков. Например, вопросы по блоку С, а чуть ниже один вопрос из B, один вопрос из A. Также отлично заходит смешивание вопросов, мозг начинает заново переосмысливать в рамках большой темы взаимоотношения различных частей. Я использую данный подход для организации материалов для самообучения. А так в целом и книгу рекомендую, шикарная кмк.
@EugeneSuleimanov6 ай бұрын
Спасибо за отзыв и предложение по улучшению.
@andarworld89858 ай бұрын
Большое спасибо за структурированную, грамотно поданную информацию!
@EugeneSuleimanov8 ай бұрын
Спасибо за отзыв!
@Celestial-y4n4 ай бұрын
Дай бог тебе здоровья, добрый человек. Спасибо!
@EugeneSuleimanov4 ай бұрын
@@Celestial-y4n спасибо за поддержку :)
@zhansayabaturbek12276 ай бұрын
впервые встречаю очень хороший и понятный материал про многопоточность. А главное с примерами, спасибо вам огромное. Прекрасно объясняете.
@EugeneSuleimanov6 ай бұрын
Спасибо за отзыв!
@bagbich6 ай бұрын
Очень крутой канал. Объяснения подробные, но при этом лёгкие для понимания, без воды. 1,5 часа прошли мигом и всё хорошо усвоено. Спасибо, Евгений. Когда-то во многом благодаря вашим урокам с тестовыми собеседованиями стал разработчиком и спустя несколько лет продолжаю смотреть вас и подчёркивать для себя что-то новое.
@EugeneSuleimanov6 ай бұрын
Большое спасибо за поддержку! Рад, что материал оказался полезен.
@alevadnaya8 ай бұрын
Огромное спасибо за ваш труд, Евгений
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@olegk62738 ай бұрын
Евгений, спасибо! Освежил знания. Очень было интересно и не скучно
@EugeneSuleimanov8 ай бұрын
Спасибо за отзыв!
@daurenabdikadyr17636 ай бұрын
Комментарий в поддержку канала. Очень качественная и хорошо структурированная подача. Очень информативно
@EugeneSuleimanov6 ай бұрын
Спасибо за поддержку!
@leradmitrenko7836 ай бұрын
спасибо большое за видео! это лучшая информация, что я видела про многопоточность, наконец-то я начинаю понимать эту тему))
@EugeneSuleimanov6 ай бұрын
Большое спасибо за отзыв, рад, что материал оказался полезен.
@zagamusic5089Ай бұрын
Спасибо вам за контент!)
@alilaveaau5 ай бұрын
Спасибо большое! Было бы интересно послушать от вас про стримы🙌🏻
@haykavetisyan55638 ай бұрын
Объяснение виртуальных потоков потрясающее! Привет из Армении, дорогой Евгений.
@EugeneSuleimanov8 ай бұрын
Большое спасибо за отзыв!
@АлександрБондарев-ъ7ф8 ай бұрын
Сеппер. Материал прям разжеван. Подача на высоте. Спасибо за труд.
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@JGolt5 ай бұрын
Спасибо за такой ценный и полезный материал! Все четко и по делу! P.s. после темной темы IDEA видеть белый экран слайда презентации - боль для глаз :D
@EugeneSuleimanov5 ай бұрын
@@JGolt спасибо за отзыв! По экрану, не учел этот момент, спасибо за информацию :)
@davitkostandyan51038 ай бұрын
Как всегда все максимально понятно, спаси большое за твой труд!
@EugeneSuleimanov8 ай бұрын
Большое спасибо за отзыв!
@АнтонВеснин-э8ж8 ай бұрын
В поддержку канала! Спасибо за видео!
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@twobeerornottwobeer59738 ай бұрын
Благодарю за видео, что-то новое подчерпнул для себя. Да и повторенье не помешает.
@EugeneSuleimanov8 ай бұрын
Спасибо за отзыв!
@alexandr77225 ай бұрын
Отличный материал, спасибо Евгений
@EugeneSuleimanov5 ай бұрын
@@alexandr7722 спасибо за поддержку!
@elnar_12069 ай бұрын
Спасибо за видео про многопоточность! Очень понятно объяснили🔥🔥🔥
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв, Эльнар!
@YuriyBoiko-j8f5 ай бұрын
Браво, лучшее объяснение!
@EugeneSuleimanov5 ай бұрын
Спасибо за отзыв!
@vadmixname9784 ай бұрын
Как раз изучаю сейчас потоки, спасибо автору!!!
@EugeneSuleimanov4 ай бұрын
@@vadmixname978 спасибо за поддержку!
@Valerikvv808 ай бұрын
Отличное видео. Буду периодически пересматривать
@EugeneSuleimanov8 ай бұрын
Спасибо за отзыв!
@ЮрийДымов-у6щ5 ай бұрын
Прекрасная последовательность подачи материала
@EugeneSuleimanov5 ай бұрын
@@ЮрийДымов-у6щ спасибо за отзыв!
@sayrex-d7x8 ай бұрын
Евгений, спасибо за видео и примеры)
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@oldjohn15033 ай бұрын
Ох, круто! Спасибо тебе, Женя, огромное!
@EugeneSuleimanov3 ай бұрын
@@oldjohn1503 спасибо за отзыв!
@alexandr.goncharov6 ай бұрын
Очень простым язым про сложное. Спасибо!
@EugeneSuleimanov6 ай бұрын
Спасибо за отзыв!
@Dominic_Herzog8 ай бұрын
Спасибо, стало более понятно, особенно, про executors и forkjoin, не разбирался с этим)
@EugeneSuleimanov8 ай бұрын
Спасибо за комментарий! Рад, что материал оказался полезен.
@pheelsav7 ай бұрын
Топовый материал + все структурированно!
@EugeneSuleimanov7 ай бұрын
Большое спасибо за отзыв!
@pheelsavАй бұрын
@@EugeneSuleimanov Пересматриваю как ждый раз когда меняю работу/готовлюсь к собесам и каждый раз в восторге - это идеальный вариант что бы все освежить в памяти! Всех благ!
@phaselock-java9 ай бұрын
Имба подъехала) Спасибо!
@EugeneSuleimanov9 ай бұрын
Спасибо за поддержку!
@dmitrelkin92569 ай бұрын
Шедеврально. Фундаментальная систематизация темы многопоточности. Достойно быть оформлено как раздел учебника. Персональная благодарность за наглядное объяснение использования Conditions у ReentrantLocks.
@EugeneSuleimanov9 ай бұрын
Большое спасибо за отзыв!
@MartinXProject6 ай бұрын
Огромное спасибо за труд!
@EugeneSuleimanov6 ай бұрын
Спасибо за поддержку!
@borlok29 ай бұрын
Спасибо, Женя! Огромная работа, ты молодец!)
@EugeneSuleimanov9 ай бұрын
Спасибо, Юра :)
@qwe32718 ай бұрын
Спасибо за труды!
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@МишаФани9 ай бұрын
Контент как всегда на высоте! Спасибо.
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв!
@АннаСмирнова-о4л8 ай бұрын
спасибо большое! прекрасно поданный материал
@EugeneSuleimanov8 ай бұрын
Большое спасибо за отзыв!
@markolitovchenko54527 ай бұрын
Спасибо Евгений 😊
@EugeneSuleimanov7 ай бұрын
Спасибо за отзыв!
@e-researcher5 ай бұрын
Евгений, спасибо!
@EugeneSuleimanov5 ай бұрын
Спасибо за комментарий!
@АлгизАбушаев5 ай бұрын
Низкий поклон!!!
@EugeneSuleimanov5 ай бұрын
Спасибо за поддержку!
@dmitrysavkin59817 ай бұрын
Большое Спасибо. Очень нужная вещь
@EugeneSuleimanov7 ай бұрын
Спасибо за поддержку!
@happysadman85585 ай бұрын
Спасибо большое за видео, Евгений! Много нового узнал, хоть уже с многопоточностью довольно давно знаком. Было очень интересно. Хотелось уточнить, что в примере с "first", "second", "third" можно было бы поочередно запускать, потом дожидаться выполнения каждого из потоков и в таком случае бы было поочередно выведены "first", "second" и "third". Я понимаю что в этом варианте не было бы никакого смысла от создания нескольких потоков, и все можно было бы последовательно выводить в одном, но думаю для полноты картины будет полезно знать, если вдруг кто-то задастся вопросом "а почему не сделать t1.start(); t1.join(); t2.start...?"
@ИгорьМешалкин-ж7ф7 ай бұрын
21:10 а зачем в итоге знать приоритеты если они по факту не работают?
@Хочувсезнать-х4ю9 ай бұрын
Супер! Спасибо, Женя!
@EugeneSuleimanov9 ай бұрын
Большое спасибо за отзыв!
@dozory48 ай бұрын
Если у кого-то зависает постоянно, как у меня, в примере на 38:38. Попробую объяснить (если не прав, поправьте) Если первый поток первый захватывает lock и выполняет firstMethodCalled.signal(), пока второй поток ждёт lock, то когда второй поток получит lock и встанет на ожидание firstMethodCalled.await(), то его некому будет разбудить. Вариант решения, как я понял, заключается в оборачивании firstMethodCalled.await() в конструкцию while, где условием будет флаг, который меняет первый поток. Это позволяет добиться: 1. Не вставать в ожидание, если метод first() выполнился первым 2. Избежать ложных пробуждений, если метод second() выполнится первым, и поток будет ожидать
@ratmirv8 ай бұрын
У меня такая же проблема, спасибо за решение) Не понимаю, как у автора ни разу не возникло такой ситуации.
@qwe32717 ай бұрын
Тоже самое, рандомно паркуются либо Т2 и Т3, либо Т3
@qwe32717 ай бұрын
public class Counter { private final ReentrantLock lock = new ReentrantLock(); private final Condition firstMethodCalled = lock.newCondition(); private final Condition secondMethodCalled = lock.newCondition(); private final AtomicInteger count1 = new AtomicInteger(0); private final AtomicInteger count2 = new AtomicInteger(0); public void first() { lock.lock(); try { System.out.println("first"); firstMethodCalled.signal(); count1.incrementAndGet(); } finally { lock.unlock(); } } public void second() { lock.lock(); try { while (count1.get() == 0) { firstMethodCalled.await(); } System.out.println("second"); secondMethodCalled.signal(); count2.incrementAndGet(); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } public void third() { lock.lock(); try { while (count2.get() == 0) { secondMethodCalled.await(); } System.out.println("third"); } catch (InterruptedException e) { e.printStackTrace(); } finally { lock.unlock(); } } }
Не могу понять, почему возможна ситуация, когда два раза будет напечатан PING (46:39). Если я правильно понял, то поток блокируется до момента, пока не будет выполнен обмен (когда другой поток инициирует обмен). Как поток может два раза выполнить: exchange() + print(), если другой поток должен как минимум один раз сделать exchange() + print(), что исключает возможность вывода в консоль дважды например, PING?
@ilyasimonovets46398 ай бұрын
Большое спасибо за видео 🤝
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@VolodyaFedotOFFАй бұрын
Механизм CaS это по сути своей версионирование. Ничего не блокируем, пусть сколько угодно потоков заходят, просто каждый работает со своей версией. А потом прежде чем записать итоговое значение сравниваем версии. Но только как бы под версиями используется начальное значение переменной. В общем это механизм оптимистической блокировки😁 Но вы Евгений молодец, хорошо доносите суть.
@EugeneSuleimanovАй бұрын
@@VolodyaFedotOFF по сути, да. Спасибо за отзыв!
@ercefwxdx9 ай бұрын
Дякую! Супер!
@EugeneSuleimanov9 ай бұрын
Спасибо за поддержку!
@mobilafilm3 ай бұрын
спасибо👍
@knockjkeee9 ай бұрын
как всегда -> безупречно!👍
@EugeneSuleimanov9 ай бұрын
Спасибо за комментарий!
@kazbowski9 ай бұрын
Это самое годное, что я видел за последнее время (честно) Можно предлагать темы для видео ?)
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв! Предлагать можно, но уже есть свой план на ближайшие 6 месяцев.
@kazbowski9 ай бұрын
@@EugeneSuleimanov хотел предложить довольно интересную тему - реализация OTP (one time password / двухфакторка) на спринге. По ней довольно мало материала в интернете, и то, что есть - сделано очень коряво и не секьюрно. Я видел ваши видео, видел вашу архитектуру, и мне кажется, у вас бы получилось реализовать хороший прототип :)
@marksalvatore92579 ай бұрын
Как раз готовлюсь к собесу. Спасибо большое
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв и удачи на собеседовании.
@javaspace99999 ай бұрын
Как всегда, лучший 😊
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв :)
@chydomonahsilver78558 ай бұрын
Лучший блогер по джава!
@EugeneSuleimanov8 ай бұрын
Спасибо за поддержку!
@themistocies508 ай бұрын
34:10 а можно ли назвать эти лок-объекты не мониторами, а именно мьютексами? Насколько я понимаю, реализация монитора происходит с помощью блока synchronized, а в параметры этого блока мы передаем мьютекс, т.е. значение (объект/класс), на котором синхронизируемся?
@EugeneSuleimanov8 ай бұрын
Спасибо за вопрос. Да, можно назвать и так, но в Java чаще всего используется термин монитор.
@alexey91398 ай бұрын
Евгений, спасибо за лекцию - лучшее, что я видел по многопоточке освещающее практически все аспекты. Два вопроса: 1. В ConcurrentHashMap почему блокировка идет не по бакету а по "сегметам из 4х бакетов" - какое логическое объяснение? 2. В чем смыл SingleThreadPoolExecutor если есть Fixed? доставить из пула "один из одного" не пересоздавая?
@themistocies508 ай бұрын
если бы блокировка была на уровне одного бакета, потребовалось бы больше блокировок и, соответственно, выше были бы накладные расходы на управление ими. Так как блокировка происходит на уровне сегментов, несколько потоков могут одновременно обрабатывать различные сегменты карты, что увеличивает производительность многопоточных операций.
@alexandr60558 ай бұрын
Очень хорошие вопросы, надеюсь Евгений ответит
@МаратМирзабалаевАй бұрын
Спасибо, разобрался с многопоточностью. Почему не было рассказано ничего про методы wait, notify и notifyAll?
@EugeneSuleimanovАй бұрын
@@МаратМирзабалаев спасибо за отзыв. wait, notify, notifyAll крайне базовые, только по этой причине.
@caffeinejavacode14757 ай бұрын
Полезно!
@EugeneSuleimanov6 ай бұрын
Спасибо за поддержку!
@bigbugsking1173Ай бұрын
Как сделать приложение постоянно работающее, обрабатывающее входящие исходящие запросы, (которое закрывается по кнопке), но при этом чтобы оно не жрало процессор на 100% ???
@themistocies508 ай бұрын
Привет! На 30:21 ведь нет необходимости использовать synchronized на методах? Т.к. каждый поток работает со своей переменной, аномалий никаких не происходит.
@EugeneSuleimanov8 ай бұрын
Спасибо за вопрос! Да, все верно, здесь просто подводка к внутренним монитором.
@SIGORYS7 ай бұрын
здравствуй, на 34.57 нашел противоречие насчет освобождения мониторов. В Java внутренние мониторы (или мониторы объектов) не могут быть освобождены "любым" потоком. Мониторы объектов обычно захватываются и освобождаются тем же потоком, который вошел в блок synchronized для данного объекта.
@СарангБех14 күн бұрын
странный момент: у меня именно IncrementCounterSynchronizedBlockDemo отрабатывает 50-70s а вот казалось бы более параллельный IncrementTwoCountersSynchronizedOnObjectDemo отрабатывает за 90-110s почему так?
@ioanntrapeznikov9 ай бұрын
Как всегда уровень
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв!
@fara0n3339 ай бұрын
Лайк сразу !)
@EugeneSuleimanov9 ай бұрын
Спасибо за поддержку!
@user-lk8n0fgjk9 ай бұрын
Поправьте, если не прав, но мне кажется что на 12:03 упоминается пример про SimpleCounterDemo, которого нет в данном видео выше
@EugeneSuleimanov9 ай бұрын
Да, вы правы, спасиб за уточнение, вероятнее всего выпало при монтаже. github.com/proselytear/javaconcurrency/blob/main/src/main/java/net/proselyte/concurrency/threadsintro/SimpleCounterDemo.java Здесь ссылка на этот пример.
@ktotam89139 ай бұрын
Спасибо ❤
@EugeneSuleimanov9 ай бұрын
Спасибо за поддержку!
@nouchance9 ай бұрын
Спасибо Евгений! Хочу спросить у вас, точно так как у .NET’e работает потоки как у Java ? Потому что я .NET разработчик.Заранее спасибо!
@HaarDD6 ай бұрын
Отличный материал, огромное спасибо за труды! Евгений, подскажите, есть ли в планах лекции по Spring? 😇
@EugeneSuleimanov6 ай бұрын
Спасибо за отзыв! По Spring - есть в планах, но по срокам на данный момент не могу точно подсказать из-за высокой рабочей нагрузки.
@user-lk8n0fgjk9 ай бұрын
Евгений, огромное спасибо за видео. С помощью Ваших роликов я разобрался во многих аспектах Java. Если возможно, подскажите, пожалуйста, зачем в классе IncrementTwoCountersSynchronizedDemo делать synchronized два метода по инкременту счетчиков? Если каждый поток юзает только свой метод и свой счетчик, и у потоков нет общих ресурсов. Я с десяток раз запускал код без синхронайзд и всегда ответ был один и тот же. Спасибо за ответ!
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв и ваш вопрос. Здесь была демонстрация того, что мы можем использовать несколько таких блоков внутри класса и подводка к блокировке через объект.
@user-lk8n0fgjk9 ай бұрын
@@EugeneSuleimanov Понял, спасибо!
@SplashDmg20118 ай бұрын
Вот да, хотел написать такой же коммент, но сначала решил поискать среди имеющихся :) согласен, что пример странный, т.к. синхронизация там вообще ничего не дает.
@qaserus12269 ай бұрын
спасибо огромное)
@EugeneSuleimanov9 ай бұрын
Спасибо за отзыв :)
@СергейПанов-з3ц8 ай бұрын
Евгений, спасибо за очень крутое видео. Все очень подробно и доступно показано. На 35:38 вы упомянули слово "семантика", это очень сложное слово, не понятно что оно означает. Могли бы вы дать объяснение что оно значит в данном контексте?
@ratmirv8 ай бұрын
Я так понял, что возможно под "семантикой" в данном случае имеется в виду функционал или способ работы/применения.
@СергейПанов-з3ц8 ай бұрын
@@ratmirv в данном контексте "семантика" означает набор гарантий, которые будут выполнены в ходе исполнения программы. Я знал ответ на этот вопрос, прежде чем спрашивать. Просто хотел услышать ответ Евгения. Возможно он будет отличаться от моего определения.
@МаксимНаумов-ъ2у8 ай бұрын
Евгений, а где ваши выступления на конференциях посмотреть можно?)
@EugeneSuleimanov8 ай бұрын
Спасибо за комментарий! По видео не уверен, что созвонились, не самые мейнстримные площадки были.
@neyasbit3 күн бұрын
Что за золото? ❤🔥
@chciwosc5 ай бұрын
Отличный sumamrize многопоточки. Не думал снять про Котлин Коротины? Единственное Немного информация про ConcurrentHashMap устарела. Такой подход использовался до Джава 8 с блокировкой сегментов. Сейчас же блокируется только 1 бакет, а не 25%. И то, как я понял, он не сразу блокируется а изначально будет использовать CAS (Optimistic locking)
@EugeneSuleimanov5 ай бұрын
@@chciwosc спасибо за отзыв и уточнение по ConcurrentHashMap. По котлин на текущий момент не было в планах, но идея хорошая.
@bodythanks9 ай бұрын
А почему не рассказывает про happens-before?
@maksimus.ssirotkin11248 ай бұрын
Добрый день и еще такой вопрос, виртуальный поток это абстракция над чем? Я так же смотрел материал где говорится, что инструменты типа corutine and gorutine , это frameworks на уровне языка, позволяющий писать асинхронный код как последовательный
@EugeneSuleimanov8 ай бұрын
Спасибо за вопрос! Это абстракция над обычными потоками операционной системы. Относительно coroutine и goroutine - это механизмы, предоставляемые различными языками программирования (например, Kotlin для coroutine, Go для goroutine), которые обеспечивают лёгкие "зелёные" потоки выполнения. Они позволяют писать асинхронный код так, как будто он выполняется последовательно, что облегчает асинхронное программирование и уменьшает накладные расходы на создание потоков.
@maksimus.ssirotkin11248 ай бұрын
@@EugeneSuleimanov тогда, по -сути поток Операционной системы, это время Одного из процессоров, которое выделено , на выполнение задачи., в рамках процесса программы. Но будет ли оно выполнено последовательно или попеременно, Или параллельно, т.е другим процессором или ядром, от нас не зависит, управлять этим нельзя, можно лишь направлять. Я правильно понимаю?
@EugeneSuleimanov8 ай бұрын
@@maksimus.ssirotkin1124 по определению потока - не совсем согласен. Но по части контроля - верно, в Java мы не можем это контролировать.
@НикитаЗемницкий-ы3ж5 ай бұрын
Пример с Callable и Future не совсем корректный, из-за того, что executor Service создается в try с ресурсами и будет закрыт после выхода из try, мы вынуждены ждать, пока все потоки не закончат работу. На видео это не заметно, так все выполняется большим количеством потоков, но если поставить выполнять это все 2-3 потока, то к брейкпоинту на строчке 22 программа будет идти очень долго
@EugeneSuleimanov5 ай бұрын
@@НикитаЗемницкий-ы3ж большое спасибо за корректное замечание.
@maksimus.ssirotkin11248 ай бұрын
Здравствуйте, такой вопрос, за счет чего достигается ускорение,если потоков больше чем ядер, и другой вопрос, можно ли средствами Java, передать выполнение задачи или пула задач, конкретному процессору или процессору, но чтобы он не отвлекался, на выполнение других задач?
@EugeneSuleimanov8 ай бұрын
Спасибо за вопросы! По первому вопросу: В случае многопоточных вычислений, где задачи могут быть разделены на независимые подзадачи, параллельное выполнение на нескольких потоках может значительно ускорить общее время выполнения. По второму вопросу: В Java нет прямого способа явно указать процессор, на котором должна выполняться задача. Надеюсь, я верно понял вопросы и смог дать на них ответ.
@konstantenivanov62358 ай бұрын
добрый день. Не понял на 34.19 Как может быть что внутренний монитор может быть освобожден любым потоком? ведь если Т1 захватит монитор текущего объекта, то Т2 поток будет ждать пока монитор не освободится.
@EugeneSuleimanov8 ай бұрын
Добрый день, спасибо за вопрос. Как пример - метод notifyAll() у класса Object.
@lebaur6 ай бұрын
@@EugeneSuleimanov Внутренний монитор (intriNsic lock) не может быть освобожден любым потоком. Чтобы notifyAll() отработал, он должен захватить внутренний монитор объекта, но он не освобождает его, если он захвачен кем-то. Это wait() после успешного выполнения отпускает монитор, чтобы его notifyAll() мог захватить потом.
@qrthack9 ай бұрын
101 мой друг, хочу в backend, выбираю между PHP, Golang, Node.js, Java, что посоветуешь, чтобы легче было устроиться на работу с перспективой? Или с какого языка посоветуешь начать?
@EugeneSuleimanov9 ай бұрын
Спасибо за комментарий! Я предвзят и советовал бы Java :)
@friedbearsburninhell20229 ай бұрын
Контентище!
@EugeneSuleimanov9 ай бұрын
Спасибо за комментарий!
@ВладМилаш-э1с6 ай бұрын
Лекция топ
@EugeneSuleimanov6 ай бұрын
Спасибо за комментарий!
@twobeerornottwobeer59738 ай бұрын
Кажется про volatile вопрос есть, а что это нету
@VladBodrov6 ай бұрын
Это видео достойно доната) Может быть заведешь бусти?)
@EugeneSuleimanov6 ай бұрын
Большое спасибо за поддержку! Донаты на данный момент не планируются.
@codingpas3 ай бұрын
Как вы успеваете пилить такие классные ролики и работать?
@EugeneSuleimanov3 ай бұрын
@@codingpas спасибо за комментарий. Немного меньше сплю :)
@kozhuhovIvan9 ай бұрын
Разве открытые потоки не нужно закрывать?
@EugeneSuleimanov9 ай бұрын
Спасибо за вопрос. Не могли бы вы немного уточнить вопрос?
@kozhuhovIvan9 ай бұрын
@@EugeneSuleimanov каждый поток надо закрывать, разве нет?
@alexandr60558 ай бұрын
@@kozhuhovIvanон же говорил. В 21 джаве Executors стали импл. Closeable. А если ты про обычные потоки, то нахрена их закрывать, и как ты их закроешь. Метод .stop() давно deprecated
@SplashDmg20118 ай бұрын
@kozhuhovIvan Вы, наверное, путаете с ресурсами, которые действительно надо закрывать (например, объект, который работает с файловой системой или сетью). Потоки закрывать не нужно, они завершаются сами, когда завершают выполнение своей работы.
@viewer_evgeniy5 ай бұрын
Здравствуйте, Евгений. Спасибо за ваши уроки! Наглядно Starvation можно легко показать с помощью класса, который будет использовать пару локов. В методе класса эти локи будут использованы по порядку. В мейне же создаем три потока, и три лока, первому потоку даем лок1 и лок2, второму лок2 и лок3, третьему потоку - лок 1 и лок3. Таким образом, только поток2 будет первым иметь возможность забрать лок2, и поэтому у него будет определенный приоритет в доступе к ресурсу (например к счетчику). Это приведет к тому, что поток2 будет работать эффективнее, когда оставшиеся два потока будут сильно отставать. Результат счетчика (считаем до 500тыс) может быть следующим: T2 counted 374166 T1 counted 70861 T3 counted 54973
@EugeneSuleimanov5 ай бұрын
@@viewer_evgeniy большое спасибо за поддержку и хороший пример!