Homework-sberbank-number-11

0

BOMBORDIR

17 мар 2025, 21:33
2 года назад
год назад
2 года назад
год назад
README
# Homework-sberbank-number-11
 
1) Как получить ссылку на текущий поток ?
Для получения ссылки на текущий исполняемый поток используется статический метод Thread.currentThread().
 
2) Зачем нужно ключевое слово synchronized ? На что его можно вещать(поле, метод, класс, конструктор..) ?
Ключевое слово synchronized используется для обеспечения потокобезопасности.
Оно нужно для управления одновременным доступом нескольких потоков к общим ресурсам.
synchronized гарантирует, что только один поток может выполнять определенный участок кода в данный момент времени, предотвращая “состояние гонки” и повреждение данных.
 
3) Захват какого монитора происходит при входе в synchronized метод/статик метод/блок ?
synchronized метод экземпляра: Захватывается монитор объекта (this), для которого был вызван метод.
synchronized статический метод: Захватывается монитор объекта Class, к которому принадлежит метод.
synchronized блок: Захватывается монитор объекта, указанного в скобках после ключевого слова synchronized.
 
4) Зачем нужно ключевое слово volatile ? На что его можно вещать(поле, метод, класс, конструктор..) ?
Ключевое слово volatile используется для обеспечения видимости изменений переменной между потоками.
Без volatile, каждый поток может хранить копию переменной в своем кэше, и изменения одного потока могут быть не видны другим.
 
5) Что делает метод Object#wait, Object#notify, Object#notifyAll ?
Эти методы позволяют потокам взаимодействовать и координировать свои действия.
Они должны вызываться только внутри synchronized блоков или методов, связанных с одним и тем же монитором.
 
wait(): Освобождает монитор и переводит текущий поток в состояние ожидания до тех пор, пока другой поток не вызовет notify() или notifyAll() для этого монитора.
notify(): Выбирает один поток из wait set монитора и переводит его в состояние готовности к выполнению. Не гарантирует, какой именно поток будет выбран.
notifyAll(): Переводит все потоки из wait set монитора в состояние готовности к выполнению. Они будут бороться за захват монитора.
 
6) Что за исключение IllegalMonitorStateException ?
Исключение IllegalMonitorStateException возникает, когда методы wait(), notify(), или notifyAll() вызываются вне synchronized блока или метода.
Это указывает на то, что поток пытается выполнить операцию, требующую владения монитором, не владея им.
 
7) Что делает метод Thread#join ?
Метод join() позволяет одному потоку (поток A) дождаться завершения другого потока (поток B).
Когда поток A вызывает threadB.join(), поток A приостанавливает свое выполнение до тех пор, пока поток B не завершится.
 
8) Что делает метод Thread#interrupt ?
Метод interrupt() устанавливает флаг прерывания для указанного потока.
Это не приводит к немедленному завершению потока. Задача потока - периодически проверять свой флаг прерывания и реагировать на него.