# Java инструменты многопоточности 1. **JMM (Java Memory Model)** - описывает поведение потоков в среде исполнения Java. - Однопоточные программы выолняются псевдопоследовательно, то есть в реальности процессор может выполнять несколько операций за такт, заодно изменив их порядок, однако все зависимости по данным остаются, так что поведение не отличается от последовательного. 2. **`java.lang.Thread`** - каждый поток ассоциируется с объектом этого класса. - `Thread.sleep()` отдает команду текущему потоку приостановить выполнение на указанное время. - `Thread.interrupted()` возвращает `true`, если выполнение потока было прервано. - `thread.join()` позволяет одному потоку ждать окончания выполнения другого (т.е. текущий ждет выполнения потока `thread`). 3. **`java.lang.Runnable`** - интерфейс определяет единственный метод `run`, который должен содержать код, который будет выполняться в потоке. 4. **`volatile`** - данный модификатор указывает компилятору, что чтение перемнной будет производиться прямо из памяти, что позволяет нескольким потокам видеть последнее значение переменной. 5. **`java.util.concurrent.locks.Lock`** - интерфейс, реализации которого предполагают более обширные операции блокировки, чем предоставляемые `synchronized` методами и блоками.