Monitor - высокоуровневый механизм взаимодействия и синхронизации процессов, обеспечивающий доступ к неразделяемым ресурсам.
Semaphore - семафор, самый простой тип блокировки, ограничивает количество потоков, которые могут войти в заданный участок кода.
Mutex - двоичный простейший семафор, который может находиться в одном из двух состояний: отмеченном или неотмеченном. Он отличается от семафора тем, что только владеющий им поток может его освободить, т.е. перевести в отмеченное состояние.
Reentrant mutex - мьютекс, который может быть залочен несколько раз одиним и тем же процессом/потоком без создания взаимной блокировки.
Lock - блокировка, механизм синхронизации, позволяющий обеспечить исключительный достп к разделяемому ресурсу между несколькими потоками.
Spinlock - тип блокировки, который заставляет поток в бесконечном цикле пытаться получить доступ к блокировке.
Deadlock - взаимное исключение, блокировка, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами.
Livelock - взаимное исключение, блокировка, при которой несколько процессов находятся в состоянии бесконечного зацикливания и не производят полезной работы.
Process - процесс обладает автономной средой выполнения.
Thread - потоки иногда называют легковесными процессами (lightweight processes). Потоки существуют внутри процесса - каждый процесс обладает хотя бы одним потоком.
Interrupt - прерывание является указанием потоку остановить выпонение.
Join - позволяет одному потоку ждать окончание выполнения другого потока.
Thread safe - участок кода, который работает корректно как в однопоточной, так и в многопоточной среде.
Thread affinity - при старте потока, можно указать в рантайм среде, чтобы поток был привязан к определенному ядру.
EDT (Event Dispatching Thread) - специальный поток, используемый для обработки событий из очереди событий. Такой подход является концептом событийно-ориентированного программирования.
Race condition - ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода.
Context switches - когда планировщик временно приостанавливает работу потока, чтобы активировать другой поток.
Atomic action (Атомарная операция) - операция, выполняющаяся как единое целое, либо не выполняющаяся вовсе.
Happened-before relationship - отношение "выполняется прежде" двух событий, которое гарантирует, что память, записанная событием A будет видна для события B, т.е. событие А завершает свою запись перед тем, как B начнет чтение.
Critical section - участок кода, в котором производится доступ к общему ресурсу, который не должен быть одновременно использован более чем одним потоком.
JMM (Java Memory Model) - описывает поведение потоков в среде исполнения Java.
java.lang.Thread
- каждый поток ассоциируется с объектом этого класса.
Thread.sleep()
отдает команду текущему потоку приостановить выполнение на указанное время.Thread.interrupted()
возвращает true
, если выполнение потока было прервано.thread.join()
позволяет одному потоку ждать окончания выполнения другого (т.е. текущий ждет выполнения потока thread
).java.lang.Runnable
- интерфейс определяет единственный метод run
, который должен содержать код, который будет выполняться в потоке.
volatile
- данный модификатор указывает компилятору, что чтение перемнной будет производиться прямо из памяти, что позволяет нескольким потокам видеть последнее значение переменной.
java.util.concurrent.locks.Lock
- интерфейс, реализации которого предполагают более обширные операции блокировки, чем предоставляемые synchronized
методами и блоками.
sleep()
- заставляет поток остановить свое выполнение на указанное время. При этом поток не теряет контроль над монитором.
start()
- запускает данный поток из текущего потока.
run()
метод этого же потока.run()
- наследники Thread
должны перегружать данный метод. Он вызывается при старте потока.
interrupt()
- прерывает выпонение потока.
InterruptedException
- данный поток получит это исключение, если произошло успешное прерывание потока.ClosedByInterruptException
- если данный поток был заблокирован I/O операцией, то поток получит это исключение по окончанию прерывания.setPriority()
- изменяет приоритет данного потока.
join()
- заставляет поток ждать не более чем указанное время, чтобы завершиться.
wait()
, который вызывается пока isAlive
. После завершения потока вызывается notifyAll()
метод.wait()
,notify
,notifyAll
методы из Thread
сущностей, так как это не рекомендованно.setDaemon()
- отмечает данный поток как поток-демон или пользовательский поток.
yield()
- указывает планировщику, что текущий поток закончил свое выполнение и готов перейти в пользование процессора. Планировщик однаком может игнорировать это указание.