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
Q

int++ atomic операция?

A

Нет, инкремент состоит из чтения значения, прибавления единицы, запись результата.

26
Q

Что дает интерфейс java.util.concurent.lock.Lock?

A
void lock()/unlock()
boolean trylock()
lockInterruptibly()
newCondition()
27
Q

Что такое Condition, ReadWriteLock, ReentrantLock?

A

Condition - object-wait-notify модель
ReadWriteLock пара lock-ов, один для чтения один для записи
ReentrantLock блокировка подобно ключевому слову synchronized

28
Q

Какие возможно сти Executors Framework?

A

Стандартизация вызова
Планирование
Исполнение и контроль асинхронных задач в соответствии с множеством политик выполнения.

29
Q

Опишите Producer/Consumer pattern?

Какие средства из java.util.concurrent использовать для реализации шаблона?

A

Один или несколько потоков производят данные, и параллельно этому один или несколько потоков потребляют их.
Использовать BlockingQueue

30
Q

Что такое Callable и Future?

A

Callable это интерфейс, подобны Runnable, но может возвращать результат и бросать исключения.
Future это интерфейс который описывает результат асинхронной операции.

31
Q

Какие средства предоставляет класс Executors?

A

Фабрика для ExecutorService
ThreadFactory
ScheduleExecutorService
Утилиты для Callable классов

32
Q

Вам нужно стартовать новый поток и ждать завершения этого потока. Затем продолжить в main потоке. Как это сделать?

A

Использовать java.lang.Thread.join()

33
Q

Как запустить поток дважды?

A

Дважды поток запустить нельзя. Но можно использовать ScheduledThreadPoolExecutor или Timer/TimerTask что бы выполнить поток несколько раз.

34
Q

Как пробудить поток быстрее, если он заблокирован через sleep?

A

Вызвать interrupt(), тогда броситься исключение InterruptedException

35
Q

Что делает метод interrupt()

A

Прерывает работу потока, находящего в состоянии
waiting
blocked
sleeping

36
Q

Чем отличается и для чего используются методы interrupt() и interrupted()?

A

Thread.interrupted() -прерывает текущий поток

threadObject.interupt() -прерывает поток извне, который представлен объектом

37
Q

Что такое shutdown hook?

A
Это поток, который исполняется когда JVM прекращает работу
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run() {database.close();}
});
38
Q

Что такое голодание (starvation) потока?

A

Поток с меньшим приоритетом получает меньше времени на выполнение нежели поток с высоким приоритетом

39
Q

Чем отличается notify() от notifyAll()?

A

notify() - разблокирует случайный поток

notifyAll() - разблокирует все потоки

40
Q

Чем отличаются интерфейсы Executor и ExecutorService?

A

Executor описывает только один метод execute(Runable task)

ExecutorService наследуется от Executor и предлагает дополнительные методы для работы с потоками, также с Callable.

41
Q

Когда возникает IllegalMonitorStateException?

A

Поток пытался заблокировать или разблокировать монитор не обладая им.

42
Q

Какие есть Synchronizers в пакете java.util.concurrent?

A
Semafore
CountDownLatch
CyclicBarrier
Exchanger
Phaser
43
Q

Какие есть “атомики” в java.util.concurrent?

A

AtomicBoolean, AtomicInteger, AtomicLong, AtomicIntegerArray, AtomicLongArray, AtomicReference

44
Q

Что такое Fork/Join framework и какие задачи он решает?

A

Fork/Join это реализация ExecutorService(класс ForkJoinPool), которая позволяет реализовать divide-and-conquer(разделяй и властвуй) алгоритм
Позволяет разбить обработку, которая будет выполнена одновременно и рекурсивно.

45
Q

Какое отличие между RecursiveTask и RecursiveActin?

A

RecursiveTask в методе compute() может возвращать значение, а RecursiveAction нет

46
Q

Как получить поток который выполняет метод main?

A

Thread.currentThread() - статический метод, возвращающий текущий поток.

47
Q

Какие есть коллекции в пакете java.util.concurrent?

A

CopyOnWriteArrayList
CopyOnWriteArraySet
ConcurrentSkipListMap - является аналогом TreeMap
ConcurrentHashMap - сегментация ConcurrentSkipListSet