Multithreading and Concurrency Flashcards

1
Q

Как создаются потоки в Java?

A

Реализация интерфейса Runnable

Наследование от класса Thread

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие свойства есть у потоков?

A
уникальный идентификатор в JVM
имя
приоритет
состояние
группа потоков
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое группы потоков зачем их использовать?

A

Это множество потоков. Одна группа может быть частью другой.

Когда потоков много(сотни, тысячи), удобно когда они логически сгруппированы, и ими можно управлять как одним целым.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Какие есть состояния потоков в Java?

A
NEW
RUNNABLE
BLOCKED
WAITING
TIMED_WAITING
TERMINATED
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое семафор?

A

Это средство обеспечения контроля за доступом к ресурсу. Управляется с помощью счетчика. Если он больше нуля, то доступ разрешается, а значение счетчика уменьшается. Если счетчик равен нулю, то текущий поток блокируется, пока другой поток не освободит ресурс.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое монитор?

A

Это средство обеспечения контроля за доступом к ресурсу. У монитора может быть максимум один владелец в каждый текущий момент времени.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что такое deamon thread?

A

Это поток, который работает в фоном режиме. JVM не ждет завершения daemon потока.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Можно ли конвертировать поток, который стартовал, в daemon поток?

A

Нет, нельзя. Если вызвать methodthread.setDaemon(true) на потоке, который стартовал, получим IllegalThreadStateException.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое приоритет потоков?

A

Приоритет - это некоторое число в объекте потока, более высокое значение которого означает больший приоритет. Система в первую очередь выполняет потоки с большим приоритетом, а потоки с меньшим приоритетом получают процессорное время только тогда, когда их более привилегированные собратья простаивают.
В потоках Java приоритет это int значение, от 1 до 10.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Почему wait(), notify(), notifyAll() находятся в классе Object?

A

Каждый объект в Java имеет монитор. Нет монитора потоков в Java. Каждый объект может используеться для коммуникации между потоками.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Какие способы синхронизации потоков в java вам известны?

A
  1. Системная синхронизация с использованием wait/notify.
  2. Системная синхронизация с использованием join
  3. Использование классов из пакета java.util.concurrent
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Чем отличается wait() от sleep()?

A

wait() освобождает монитор объекта, поток остается в wait list-e, sleep() просто замораживает поток на определенное параметром время без отпускания монитора.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Как и для чего используется ключевое слово synchronized?

A

Используется для указания того что метод или блок когда, в любой момент времени, будет выполняться только одним потоком.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Что происходит с монитором объекта, если бросается исключительная ситуация в synchronized блоке/методе?

A

Монитор гарантировано будет освобожден

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Какие особенности вызова методов wait(), notify() и notifyAll()?

A

Вызываются внутри synchronized блока или метода

Бросают InterruptedException

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Зачем используется ключевое слово volatile?

A

Используется для переменной, чтобы потоки читали ее значение напрямую из памяти и не кешировали ее.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

На чем происходит синхронизация в следующих методах?
public static synchronized void ssm(){}
public synchronized void ssm(){}

A
  1. Синхронизируется на классе

2. На экземпляре класса

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Что лучше, synchronized метод или блок?

A

Лучше использовать блок, потому что нужно минимизировать количество операций в synchronized блоке. Так же блок позволяет синхронизироваться на другом объекте а не на экземпляре текущего объекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Что такое ThreadLocal?

A

ThreadLocal переменные отличаются от обычных переменных тем, что у каждого потока свой собственный, индивидуально инициализируемый экземпляр переменной, доступ к которой он получает через методы get() или set()

20
Q

Что такое DeadLock?

A

Когда два и более потока блокируют друг друга

21
Q

Как получить deadlock

A

Взаимное исключение
Задержание ресурса
Нет механизма вытеснения
Циклическое ожидание

22
Q

Что такое thread pool?

A

Thread pool это структура которая управляет коллекцией рабочих потоков, она ставит задачи в очередь на выполнение этими потоками

23
Q

Какие есть thread pools?

A

SingleThreadExecutor()
FixedThreadPool(int x)
CachedThreadPool()

24
Q

Что такое atomic операция?

A

Атомарные операции - операции, выполняющиеся как единое целое либо не выполняющиеся вовсе. Т.е. это операция, во время исполнения которой данные, читаемые/изменяемые этой операцией не могут быть изменены другой операцией.

25
int++ atomic операция?
Нет, инкремент состоит из чтения значения, прибавления единицы, запись результата.
26
Что дает интерфейс java.util.concurent.lock.Lock?
``` void lock()/unlock() boolean trylock() lockInterruptibly() newCondition() ```
27
Что такое Condition, ReadWriteLock, ReentrantLock?
Condition - object-wait-notify модель ReadWriteLock пара lock-ов, один для чтения один для записи ReentrantLock блокировка подобно ключевому слову synchronized
28
Какие возможно сти Executors Framework?
Стандартизация вызова Планирование Исполнение и контроль асинхронных задач в соответствии с множеством политик выполнения.
29
Опишите Producer/Consumer pattern? | Какие средства из java.util.concurrent использовать для реализации шаблона?
Один или несколько потоков производят данные, и параллельно этому один или несколько потоков потребляют их. Использовать BlockingQueue
30
Что такое Callable и Future?
Callable это интерфейс, подобны Runnable, но может возвращать результат и бросать исключения. Future это интерфейс который описывает результат асинхронной операции.
31
Какие средства предоставляет класс Executors?
Фабрика для ExecutorService ThreadFactory ScheduleExecutorService Утилиты для Callable классов
32
Вам нужно стартовать новый поток и ждать завершения этого потока. Затем продолжить в main потоке. Как это сделать?
Использовать java.lang.Thread.join()
33
Как запустить поток дважды?
Дважды поток запустить нельзя. Но можно использовать ScheduledThreadPoolExecutor или Timer/TimerTask что бы выполнить поток несколько раз.
34
Как пробудить поток быстрее, если он заблокирован через sleep?
Вызвать interrupt(), тогда броситься исключение InterruptedException
35
Что делает метод interrupt()
Прерывает работу потока, находящего в состоянии waiting blocked sleeping
36
Чем отличается и для чего используются методы interrupt() и interrupted()?
Thread.interrupted() -прерывает текущий поток | threadObject.interupt() -прерывает поток извне, который представлен объектом
37
Что такое shutdown hook?
``` Это поток, который исполняется когда JVM прекращает работу Runtime.getRuntime().addShutdownHook(new Thread(){ public void run() {database.close();} }); ```
38
Что такое голодание (starvation) потока?
Поток с меньшим приоритетом получает меньше времени на выполнение нежели поток с высоким приоритетом
39
Чем отличается notify() от notifyAll()?
notify() - разблокирует случайный поток | notifyAll() - разблокирует все потоки
40
Чем отличаются интерфейсы Executor и ExecutorService?
Executor описывает только один метод execute(Runable task) | ExecutorService наследуется от Executor и предлагает дополнительные методы для работы с потоками, также с Callable.
41
Когда возникает IllegalMonitorStateException?
Поток пытался заблокировать или разблокировать монитор не обладая им.
42
Какие есть Synchronizers в пакете java.util.concurrent?
``` Semafore CountDownLatch CyclicBarrier Exchanger Phaser ```
43
Какие есть "атомики" в java.util.concurrent?
AtomicBoolean, AtomicInteger, AtomicLong, AtomicIntegerArray, AtomicLongArray, AtomicReference
44
Что такое Fork/Join framework и какие задачи он решает?
Fork/Join это реализация ExecutorService(класс ForkJoinPool), которая позволяет реализовать divide-and-conquer(разделяй и властвуй) алгоритм Позволяет разбить обработку, которая будет выполнена одновременно и рекурсивно.
45
Какое отличие между RecursiveTask и RecursiveActin?
RecursiveTask в методе compute() может возвращать значение, а RecursiveAction нет
46
Как получить поток который выполняет метод main?
Thread.currentThread() - статический метод, возвращающий текущий поток.
47
Какие есть коллекции в пакете java.util.concurrent?
CopyOnWriteArrayList CopyOnWriteArraySet ConcurrentSkipListMap - является аналогом TreeMap ConcurrentHashMap - сегментация ConcurrentSkipListSet