Multithreading and Concurrency Flashcards
Как создаются потоки в Java?
Реализация интерфейса Runnable
Наследование от класса Thread
Какие свойства есть у потоков?
уникальный идентификатор в JVM имя приоритет состояние группа потоков
Что такое группы потоков зачем их использовать?
Это множество потоков. Одна группа может быть частью другой.
Когда потоков много(сотни, тысячи), удобно когда они логически сгруппированы, и ими можно управлять как одним целым.
Какие есть состояния потоков в Java?
NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED
Что такое семафор?
Это средство обеспечения контроля за доступом к ресурсу. Управляется с помощью счетчика. Если он больше нуля, то доступ разрешается, а значение счетчика уменьшается. Если счетчик равен нулю, то текущий поток блокируется, пока другой поток не освободит ресурс.
Что такое монитор?
Это средство обеспечения контроля за доступом к ресурсу. У монитора может быть максимум один владелец в каждый текущий момент времени.
Что такое deamon thread?
Это поток, который работает в фоном режиме. JVM не ждет завершения daemon потока.
Можно ли конвертировать поток, который стартовал, в daemon поток?
Нет, нельзя. Если вызвать methodthread.setDaemon(true) на потоке, который стартовал, получим IllegalThreadStateException.
Что такое приоритет потоков?
Приоритет - это некоторое число в объекте потока, более высокое значение которого означает больший приоритет. Система в первую очередь выполняет потоки с большим приоритетом, а потоки с меньшим приоритетом получают процессорное время только тогда, когда их более привилегированные собратья простаивают.
В потоках Java приоритет это int значение, от 1 до 10.
Почему wait(), notify(), notifyAll() находятся в классе Object?
Каждый объект в Java имеет монитор. Нет монитора потоков в Java. Каждый объект может используеться для коммуникации между потоками.
Какие способы синхронизации потоков в java вам известны?
- Системная синхронизация с использованием wait/notify.
- Системная синхронизация с использованием join
- Использование классов из пакета java.util.concurrent
Чем отличается wait() от sleep()?
wait() освобождает монитор объекта, поток остается в wait list-e, sleep() просто замораживает поток на определенное параметром время без отпускания монитора.
Как и для чего используется ключевое слово synchronized?
Используется для указания того что метод или блок когда, в любой момент времени, будет выполняться только одним потоком.
Что происходит с монитором объекта, если бросается исключительная ситуация в synchronized блоке/методе?
Монитор гарантировано будет освобожден
Какие особенности вызова методов wait(), notify() и notifyAll()?
Вызываются внутри synchronized блока или метода
Бросают InterruptedException
Зачем используется ключевое слово volatile?
Используется для переменной, чтобы потоки читали ее значение напрямую из памяти и не кешировали ее.
На чем происходит синхронизация в следующих методах?
public static synchronized void ssm(){}
public synchronized void ssm(){}
- Синхронизируется на классе
2. На экземпляре класса
Что лучше, synchronized метод или блок?
Лучше использовать блок, потому что нужно минимизировать количество операций в synchronized блоке. Так же блок позволяет синхронизироваться на другом объекте а не на экземпляре текущего объекта.