- Не стоит стремится прочитать все ссылки урока, их можно использовать как справочник. Гораздо важнее пройти основной материал урока и сделать Домашнее Задание
- Обязательно посмотри правила работы с патчами на проекте
- Делать Apply Patch лучше по одному, непосредственно перед видео на эту тему, а при просмотре видео сразу отслеживать все изменения кода проекта по изменению в патче (
Version Control->Local Changes-> Ctrl+D) - Код проекта обновляется и не всегда совпадает с видео (можно увидеть как развивался проект). Изменения в проекте указываю после соответствующего патча.
В видео в
LazySingletonошибка: должно быть как в коде проектаinstance == null
- JVM изнутри - оптимизация и профилирование.
- Stack and Heap
- Дополнительно:
- Реализация Singleton в JAVA
- Double checked locking
- Initialization-on-demand holder idiom
- Подводные камни Singleton
- Параллелизм в Java
- Монитор (синхронизация)
- Compare-and-swap
- Java Memory Model
- Синхронизация потоков
- Обзор java.util.concurrent.*
- Как работает ConcurrentHashMap
- Справочник по синхронизаторам java.util.concurrent.*
- Использование ThreadLocal переменных
- Николай Алименков — Прикладная многопоточность
- Can thread switching happen in the synchronized block?
- The Deadlock Empire
- 1. Параллельное выполнение кода с помощью потоков
- 2. Синхронизация доступа к изменяемым объектам
- 3. Атомарные переменные и конкурентные таблицы
правка к видео:
22: completionService.submit(..)
Скачайте 1_1_MailService.patch, положите его в проект, правой мышкой на нем сделайте Apply Patch ...
- Intuit, Потоки выполнения. Синхронизация
- Алексей Владыкин, Основы многопоточность в Java
- Виталий Чибриков, Java. Многопоточность
- Computer Science Center, курс Параллельное программирование
- Юрий Ткач, курс Advanced Java - Concurrency
- Головач, курс Java Multithreading
- Перевод «Java Memory Model»
Вычекать этот проект:
git clone https://github.com/JavaOPs/masterjava.git
- Применить оптимизацию к MatrixUtil.singleThreadMultiply
- Реализовать метод
MatrixUtil.concurrentMultiply, позволяющий многопоточно перемножать квадратные матрицы N*N. - Количество дочерних потоков ограничено
MainMatrix.THREAD_NUMBER. - Добиться того, чтобы на матрице 1000*1000 многопоточная реализация была быстрее однопоточной
- не делайте 1000 000 тасок, лучше их сделать крупнее
- у меня разница между 4 и 1000 тасками по времени незаметна, поэтому делайте просто и не делайте сложно
- наконец: можно не считать значение элемента результирующей матрицы C за раз, а накапливать (
concurrentMultiply3). Мои результаты:
Benchmark (matrixSize) Mode Cnt Score Error Units
MatrixBenchmark.singleThreadMultiplyOpt 1000 ss 100 837,867 ± 25,530 ms/op
MatrixBenchmark.concurrentMultiply2 1000 ss 100 394,294 ± 21,657 ms/op
MatrixBenchmark.concurrentMultiply3 1000 ss 100 186,827 ± 11,882 ms/op



