Concurrency

Проработать

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

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

Процесс

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

Поток

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

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

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

Атомарный

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

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

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

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