Багатопоточніcть в Java 😈. Сортування Злиттям (Merge Sort) на Fork/Join фреймворку.
Вставка
- Опубліковано 22 тра 2024
- 👉 Приєднуйся до Bobocode Community: www.bobocode.com/
____________________________________________
Patreon: / bobocode
GitHub: github.com/bobocode-projects
Telegram: t.me/bobocode
LinkedIn: bit.ly/2RWPQF5
Twitter: bit.ly/3vaQiOl
Тарас в LinkedIn: bit.ly/2ElWg8J
Тарас в Twitter: bit.ly/33Pmuwg
____________________________________________
9-те заняття тренувальної програми Ultimate Enterprise Java (2021).
УВАГА! Відеозапис не містить активної частини заняття.
00:00 - Нарізка основних моментів
03:16 - Початок
03:35 - Чому важливо вивчати багатопоточність?
07:02 - 2 причини, чому багатопоточність є складною
08:17 - Модель памʼяті Java
09:15 - Дві потенційні проблеми
10:29 - 1. Проблема неконсистентності даних
13:09 - 2. Проблема застарілості даних
15:31 - Топова цитата про багатопоточність в Java
17:09 - Як запустити код в новому потоці?
19:23 - Як перевірити стан потоку?
21:25 - Проблема неконсистентності (Приклад коду)
24:35 - Чому volatile не вирішує проблему неконсистентності?
25:47 - Що таке synchronized?
27:30 - Основні "примітиви" багатопоточності в Java
30:01 - Що має знати Java-розробник?
31:38 - Як заблокувати потік?
34:59 - Що таке "Deadlock"?
39:23 - Як управляти потоком вручну? (wait, notify)
42:03 - Коротко про Concurrency Util
44:47 - Приклади з Executors
46:45 - Fork/Join framework
47:36 - 🔥 Багатопоточне Сортування Злиттям (Merge Sort)
54:12 - Реалізовуємо метод merge
56:28 - Найцікавіше про Fork/Join framework
58:09 - Як створити свій Fork/Join pool?
01:00:25 - Чому важливо знати про спільний Fork/Join pool?
01:02:27 - Заключне слово
#opensource #java #education
👉 Навчання від Bobocode: bit.ly/3IRrJhj
Дякую! Хай квітне український UA-cam.
Дякую за лексію, корисно!
ДЗ:
1. Реалізувати багатопоточне Сортування Злиттям (Merge Sort) використовуючи Fork/Join фреймворк.
2. Порівняти час виконання звичайного і багатопоточного сортування на великому обʼємі даних (200_000+).
Удачі! 💪
Перевірив в мене меньш ніж 10 млн елементів сортує швидше в одному потоці. Заміряв, 1 виклик .fork() займає чомусь аж 1мс, не розумію чого так довго якщо потокі вже по суті створені. Виходить що дуже дрібні задачі паралелити нема сенсу.
Хто хоче краще розібратись в темі, рекомендую книгу Герберт Шілд "Java, повний посібник". Там є розділ який цьому присвячений. Описані основні класи, методи та приклади використання.
Дякую за чудовий плейлист)
пс: M1 Pro різниця в 3 рази з commonPool (4390 ms i 12908 ms) массив 100М інтів
Крута лекція!
Тарас, крутий урок! Ти реально вмієш гарно пояснити
Дякую! ☺️
А чому це відео не у плейлісті "Ultimate Enterprise Java"?
Довго пояснювати. Вже там 🙂
Чи є якісь ресурси де є задачі по багатопотоковості, на кшталт leetcode?
В кінці уроку було, але може вже є щось таке)
Я не зустрічав :)
Є, але вони не дуже прикольні. Типу codegym/javarush, там є задачі на це.))) Правда Fork/join там точно немає. Все-таки на відео сказано правильно, що найкраще відкрити самому IDE і там придумувати самому.))
чи можна досягти паралельності роботи потоків та консистентності даних одночасно?
наприклад 2 потоки працювали над одними даними паралельно а потім результат смерджили якось )
якщо у нас 10 потоків та використовувати synchronized то це послідовна обробка данних у різних потоках
яка різниця якщо 9ть чекають
навіщо тоді 10 потоків якщо 1-дин потік також послідовно все обробив би. Був один мейн потік та один створений додатково
Можна :)
@@Bobocode змінив чи можна досягти на як можна досягти?
@@caffeinejavacode1475 залежно від того, яку задачу ви хочете виконати. У відео, під яким ви пишете коментар є приклад паралельності роботи потоків при сортуванні масиву з викоританням Fork/Join.
Ой шо сказати , всьо про всьо і ні про що, розмовляйте однією мовою.
Буду радий подивитися, коли зробите більш повноцінний урок по багатопоточності.