Смысл упорного труда в том, чтобы в грядущие дни вы видели только тех людей и вещи, которые вам нравятся!
Проблемы и запросы на включение приветствуются. Все документы написаны мной. Если вы считаете, что они хороши, вы можете отметить их для поощрения и поддержки :)
Вся серия статей посвящена Java concurrency . Во-первых, это мой собственный интерес. Во-вторых, эту часть очень сложно понять на практике. Кроме того, ее часто задают в процессе собеседований. Поэтому в процессе обучения я записал базовые знания, связанные с параллелизмом Java. Во-первых, я могу создать систему своих знаний, а также надеюсь, что она будет полезна другим.
О темах параллелизма Java:
(1) Содержит базовые знания о параллелизме, каждый заголовок ссылается на конкретную статью;
(2) Содержит вопросы для собеседования при осеннем наборе персонала. Их понимание поможет вам что-то получить (и я надеюсь, что каждый сможет найти свою любимую работу :)).
(3) Если в процессе чтения это было полезно, пожалуйста, поставьте мне палец вверх, что поощрит мою настойчивость в программировании.
Примечание. При перепечатке указывайте первоисточник, спасибо!
базовые знания
1.1 Преимущества и недостатки параллельного программирования
Знания: (1) Зачем использовать параллелизм? (Преимущества); (2) Недостатки параллельного программирования (3) Запутывающие концепции;
1.2 Статус потока и основные операции
Очки знаний: (1) Как создать новый поток; (2) Преобразование состояния потока; (3) Основные операции потоков (4) Поток демона;
Теория параллелизма (JMM)
Модель памяти Java и правила «случается раньше»
Очки знаний: (1) структура памяти JMM (2) переупорядочение (3) правила «происходит до»;
Ключевое слово параллелизма
3.1 Позвольте вам полностью понять синхронизацию
Знания: (1) Как использовать синхронизированный; (2) механизм мониторинга; (3) синхронизированные отношения до того; (4) синхронизированная семантика памяти; (6) стратегия обновления блокировки;
3.2 Позвольте вам полностью понять изменчивость
Очки знаний: (1) Принцип реализации; (2) Вывод отношения «происходит до» (3) Семантика памяти; (4) Реализация семантики памяти;
3.3 Как вы думаете, вы действительно понимаете финал?
Очки знаний: (1) Как использовать; (2) окончательные правила переупорядочения; (3) окончательный принцип реализации; (4) окончательные ссылки не могут «переполняться» из конструктора (это escape-последовательность).
3.4 Краткое изложение трех основных свойств: атомарность, упорядоченность и видимость.
Очки знаний: (1) Атомность: синхронизирована (2) Видимость: синхронизирована, непостоянна (3) Упорядоченность: синхронизирована, непостоянна;
Система блокировки
4.1 Первое знакомство с Lock и AbstractQueuedSynchronizer (AQS)
Знания: (1) Сравнение блокировки и синхронизации; (2) цель проектирования AQS; (3) как использовать AQS для реализации пользовательских компонентов синхронизации; (5) методы шаблона, предоставляемые AQS;
4.2 Углубленное понимание AbstractQueuedSynchronizer (AQS)
Точки знаний: (1) Структура данных очереди синхронизации AQS (2) Эксклюзивная блокировка; (3) Общая блокировка;
4.3 Еще раз разберитесь с ReentrantLock
Очки знаний: (1) Принцип реализации повторной блокировки (2) Принцип реализации справедливой блокировки; (4) Сравнение справедливой блокировки и нечестной блокировки;
4.4 Углубленное понимание блокировки чтения-записи ReentrantReadWriteLock
Очки знаний: (1) Как представлять состояние чтения и записи; (2) Получение и освобождение WriteLock; (3) Получение и освобождение ReadLock; (4) Стратегия деградации блокировки; (6) Создание очереди ожидания; Сценарии применения
4.5 Подробное объяснение механизмов ожидания условий и сигналов/уведомлений.
Точки знаний: (1) Характеристики по сравнению с механизмом ожидания/уведомления объекта; (2) Методы, соответствующие объекту ожидания/уведомления; (3) Базовая структура данных; (4) Принцип реализации Signal/signalAll; 6) Комбинация await и signal/signalAll;
4.6 Инструмент поддержки блокировки
Точки знаний: (1) Основные функции (2) Характеристики по сравнению с синхронизированной блокировкой пробуждения;
параллельный контейнер
5.1 Параллельный контейнер ConcurrentHashMap (версия JDK 1.8)
Точки знаний: (1) ключевые атрибуты; (2) важные внутренние классы; (4) методы построения; (5) процесс выполнения; (7) механизм расширения; 8) Процесс выполнения метода подсчета размера (9) Сравнение версии 1.8 ConcurrentHashMap и предыдущих версий;
5.2 CopyOnWriteArrayList параллельного контейнера
Точки знаний: (1) Принцип реализации; (2) Разница между COW и ReentrantReadWriteLock; (3) Сценарии применения; (4) Почему существует слабая согласованность; (5) Недостатки COW;
5.3 ConcurrentLinkedQueue параллельного контейнера
Точки знаний: (1) Принцип реализации (2) Структура данных (3) Основной метод (4) Цель разработки отложенного обновления HOPS;
5.4 ThreadLocal параллельного контейнера
Точки знаний: (1) Принцип реализации; (2) Принцип установки метода; (3) Принцип получения метода; (4) Принцип удаления метода;
Статья, в которой подробно объясняется проблема утечки памяти ThreadLocal из исходного кода.
Знания: (1) Принцип утечки памяти ThreadLocal (2) Рекомендации по использованию ThreadLocal (3) Сценарии приложений;
5.5 Блокировка очереди параллельного контейнера
Очки знаний: (1) Основные операции BlockingQueue (2) Часто используемые BlockingQueue;
Подробное объяснение принципов реализации ArrayBlockingQueue и LinkedBlockingQueue в параллельных контейнерах.
Пул потоков (система-исполнитель)
6.1 Принцип реализации пула потоков
Очки знаний: (1) Зачем использовать пул потоков? (2) Процесс выполнения; (3) Значение каждого параметра конструктора; (4) Как закрыть пул потоков; (5) Как настроить пул потоков;
6.2 ScheduledThreadPoolExecutor пула потоков
Очки знаний: (1) Структура класса (2) Общие методы (3) ScheduledFutureTask; (3) DelayedWorkQueue;
6.3 Краткое описание основных операций FutureTask
Точки знаний: (1) несколько состояний FutureTask (2) метод get (3) метод отмены; (4) сценарии приложения; (5) реализация интерфейса Runnable;
Класс атомарной операции
7.1 Краткое описание классов атомарных операций в атомарном пакете в Java
Очки знаний: (1) Принцип реализации; (2) Базовый тип атомарного обновления; (3) Тип массива атомарного обновления; (4) Тип поля атомарного обновления;
Инструменты параллелизма
8.1 Говоря простым языком, классы инструментов параллелизма Java — CountDownLatch, CyclicBarrier
Очки знаний: (1) CountDownLatch (2) CyclicBarrier (3) Сравнение CountDownLatch и CyclicBarrier;
8.2 Классы инструментов параллелизма Java на просторечии — Семафор, Exchanger
Очки знаний: (1) Семафор управления доступом к ресурсам (2) Обменник данных;
Практика параллелизма
9.1 Статья, позволяющая досконально разобраться в вопросе производитель-потребитель
График знаний о параллелизме JAVA
Вы можете перейти в новое окно, чтобы увеличить его для лучшего просмотра или просмотреть исходное изображение.
Ссылка на исходное изображение графика знаний. Если оно полезно, вы можете клонировать его для собственного использования.