Concurrency

Проработать

  1. Concurrency Vs Parallelism!
  2. Deadlock - Concurrency #1 - Advanced Java
  3. undefined Мютекс и монитор
  4. Синхронизированный метод и блок в Java (synchronized method vs block)
  5. Синхронизация потоков, блокировка объекта и блокировка класса
  6. Java Lock API. Теория и пример использования
  7. 10 советов по многопоточному программированию на Java
  8. Многопоточность в Java
  9. Синхронизация потоков
  10. А как же всё-таки работает многопоточность? Часть I: синхронизация
  11. Обзор java.util.concurrent.*
  12. Синхронизация потоков. Оператор synchronized
  13. Управление потоками. Ключевое слово volatile и метод yield()
  14. Что такое монитор, мьютекс и семафор? Это одно и тоже или разные вещи?
  15. 5 вещей, которых вы не знали о многопоточности
  16. Синхронизация потоков
  17. Виталий Аксенов — Введение в параллельное программирование
  18. Многопоточность в Java: ExecutorService
  19. Параллельность в Java на практике
  20. Concurrency vs Parallelism
  21. Java Concurrency in Practice, глава 1 — Книжный клуб .rar
  22. Multithreading in Java Explained in 10 Minutes
  23. Потоки в Java: От рождения до смерти. Введение в многопоточность
  24. Мастерство многопоточности: Превращаем Java в шедевр параллельного программирования
  25. Как сделать параллельные транзакции

Основные разделы

Процесс

Процесс - единица операционной системы. На которую выделена память и др. ресурсы. Содержит в себе потоки.

Поток

Поток - единица исполнения кода.

Поток имеет стэк и память для исполнения. Потоки исполняются на ядрах процессора. Чаще всего одна программа состоит из одного процесса, но бывают и исключения (например, браузер Chrome создает отдельный процесс для каждой вкладки, что дает ему некоторые преимущества, вроде независимости вкладок друг от друга). Процессы изолированы друг от друга, поэтому прямой доступ к памяти чужого процесса невозможен (взаимодействие между процессами осуществляется с помощью специальных средств).

Приложение живо пока жив хоть один поток.

Атомарный

Атомарный - значит "неделимый" - в том смысле, что операция должна быть выполнена полностью или отменена.

Критическая секция

Критическая секция - участок исполняемого кода программы, в котором производится доступ к общему ресурсу (данным или устройству), который не должен быть одновременно использован более чем одним потоком выполнения. При нахождении в критической секции двух (или более) потоков возникает состояние «гонки» («состязания»). Во избежание данной ситуации необходимо выполнение четырех условий:

Способы создания потоков

  1. Создать класс с реализацией Runnable, его объект передать его в конструктор класса Thread и вызвать метод start(). Этот интерфейс содержит один метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
  2. Наследоваться от класса Thread и переопределить его метод run().
  3. Создать объект реализации Callable передать его в реализацию ExecutorService.

Основные недостатки многопоточности