Knowledge Transfer

Ethickfox kb page with all notes


Project maintained by ethickfox Hosted on GitHub Pages — Theme by mattgraham

Concurrency

Process - object, which created by operating system, when user starts the application. Concurrency - the way of solving multiple tasks together. Parallelism - the method of execution different parts of same program. Thread - for a single process, the operating system created one main thread, which completes commands from the central processor one by one.
To create new thread we can use class

Tread or class ExecutorService.
If an exception occurs in the thread that no one catches then it will terminate.

Приоритет

Потоку можно проставить приоритет - некоторое число, которое чем больше, тем больше приоритет. Такие потоки будут выполняться в первую очередь и иметь большее процессорное время. Mutex Флаг объекта, который может принимать состояние - свободен, занят

Intrinsic locks в Java выступают в качестве mutex (mutual exclusion locks), что означает, что максимум один поток может войти в лок. Mutex - это не класс и не интерфейс в Java, а просто общее понятие.возможны только два состояния — «свободен» и «занят».

Monitor

Реализован в java через synchronized. блочит выполнение метода объекта, если он кем-то уже выполняется

Дополнительная «надстройка» над мьютексом.. Также этим термином называют многопоточную конструкцию для контроля совместного доступа к общему ресурсу («монитор объекта»).Например synchronized. Защитный механизм создает именно монитор! Компилятор преобразует слово synchronized в несколько специальных кусков кода.

Предполагает условную переменную и две операции - ждать наступления условия и сигнализировать наступление условия. Когда условие выполнено, только одна задача из пула ждущих наступления этого условия задач начинает выполняться.

States of thread

Thread API

==Thread== - is an API for low-level threads managed by the JVM and the operating system.

==Runnable== - is an interface that has one not implemented method ==run==(). The interface is used by Thread class to perform a task in a separate thread.

==Callable== - the same as Runnable, but there is a generic for returning a result of a certain type.

Producer Consumer Problem with Wait and Notify

producerconsume

Concurrency package

Executors

Atomics

Atomics (AtomicReference)

Потокобезопасные переменные, которые поддержиивают атомарные операции. Атомарность поддерживается с помощью Compare and Swap. То есть при установку значения происходит проверка, соответствует ли новое значение ожидаемому. Если оно не соответствует, то операция не выполнена и она повторяется снова.

Synchronizers

Утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков

Collections

Locks

Locks Issues

JMM

Модель памяти Java описывает поведение потоков в среде исполнения Java. Модель памяти — часть семантики языка Java, и описывает, на что может и на что не должен рассчитывать программист, разрабатывающий ПО не для конкретной Java-машины, а для Java в целом.

Visibility

One thread may not see the changes made by another because the variables are saved to the registers and the local CPU cache

Reordering

Compiler can move operations to improve performance

Happens before - Пусть есть поток X и поток Y (не обязательно отличающийся от потока X). И пусть есть операции A (выполняющаяся в потоке X) и B (выполняющаяся в потоке Y).

В таком случае, A happens-before B означает, что все изменения, выполненные потоком X до момента операции A и изменения, которые повлекла эта операция, видны потоку Y в момент выполнения операции B и после выполнения этой операции.

Happens-before is a concept, a phenomenon, or simply a set of rules that define the basis for reordering of instructions by a compiler or CPU.

  1. В рамках одного поток любая операция happens-before любой операцией следующей за ней в исходном коде
  2. Освобождение лока (unlock) happens-before захват того же лока (lock)
  3. Выход из synchronized блока/метода happens-before вход в synchronized блок/метод на том же мониторе
  4. Запись volatile поля happens-before чтение того же самого volatile поля
  5. Завершение метода run экземпляра класса Thread happens-before выход из метода join() или возвращение false методом isAlive() экземпляром того же треда
  6. Вызов метода start() экземпляра класса Thread happens-before начало метода run() экземпляра того же треда
  7. Завершение конструктора happens-before начало метода finalize() этого класса
  8. Вызов метода interrupt() на потоке happens-before когда поток обнаружил, что данный метод был вызван либо путем выбрасывания исключения InterruptedException, либо с помощью методов isInterrupted() или interrupted()
  9. An unlock on a monitor happens-before every subsequent lock on that monitor.
  10. A write to a volatile field happens-before every subsequent read of that field.
  11. A call to start() on a thread happens-before any actions in the started thread.
  12. All actions in a thread happen-before any other thread successfully return from a join() on that thread.
  13. The default initialization of any object happens-before any other actions (other than default-writes) of a program.
  14. When a statement invokes Thread.start, every statement that has a happens-before relationship with that statement also has a happens-before relationship with every statement executed by the new thread. The effects of the code that led up to the creation of the new thread are visible to the new thread.
  15. When a thread terminates and causes a Thread.join in another thread to return, then all the statements executed by the terminated thread have a happens-before relationship with all the statements following the successful join. The effects of the code in the thread are now visible to the thread that performed the join.

Write volatile field happens-before reading the same volatile field