Многопоточность (Threading)

0.0(0)
studied byStudied by 0 people
learnLearn
examPractice Test
spaced repetitionSpaced Repetition
heart puzzleMatch
flashcardsFlashcards
Card Sorting

1/15

flashcard set

Earn XP

Description and Tags

Flashcards for Многопоточность (Threading) review.

java

Study Analytics
Name
Mastery
Learn
Test
Matching
Spaced

No study sessions yet.

16 Terms

1
New cards

Синхронизация

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

2
New cards

Примеры синхронизации в Java

synchronized, ReentrantLock, volatile, atomic типы данных, барьеры из concurrent.

3
New cards

Состояние гонки (Race Condition)

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

4
New cards

Приоритет потока

Числовое значение от 1 до 10, задающее важность потока для планировщика потоков. Влияет на то, какой поток займёт процессор первым. По умолчанию у потоков приоритет 5.

5
New cards

Монитор synchronized блоков

У статического блока монитором является объект типа класс, соответствующий классу, в котором определён метод. У нестатического - this.

6
New cards

Метод Thread.join()

Текущий поток (вызвавший join()) останавливается и ждёт, пока другой поток (на котором вызвали join()) не завершится.

7
New cards

Методы wait() и notify()

wait() выпускает монитор и переходит в режим ожидания, пока кто-то не вызовет notify() на том же объекте.

8
New cards

Методы stop(), interrupt(), interrupted(), isInterrupted()

stop() - Жёстко завершает поток (устарел и опасен!). interrupt() - Просит поток прерваться, ставит флаг прерывания. interrupted() - Проверяет и сбрасывает флаг прерывания текущего потока. isInterrupted() - Проверяет, установлен ли флаг прерывания у конкретного потока.

9
New cards

Монитор

Механизм, который обеспечивает взаимное исключение (mutual exclusion) и координацию потоков. В Java каждый объект имеет встроенный монитор. Можно сказать: монитор - это охранник объекта, который пускает внутрь только одного потока за раз.

10
New cards

ConcurrentHashMap

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

11
New cards

CopyOnWriteArrayList

Потокобезопасный аналог ArrayList, при изменении листа создаётся новая его копия. Подходит для ситуаций, где много чтений и мало изменений.

12
New cards

CopyOnWriteArraySet

То же самое, что и CopyOnWriteArrayList, но содержит в себе только уникальные значения. Не даёт исключение ConcurrentModificationException.

13
New cards

Иерархия интерфейсов Queue

Queue -> BlockingQueue, TransferQueue, BlockingQueue -> BlockingDeque, от кью ConcurrentLinkedQueue, трансфер кью LinkedTransferQueue, блокинг дек LinkedBlockingDeque.

14
New cards

blocking queues

array blocking queue имеет фиксированный размер, элементы в массиве и блокирует припереполнении linked blocking queue элементы в связанном списке, можно задать размер, по умолчанию почти бесконечная priority blocking aueue не ограничена по размеру, а элементы упорядочены по приоритету (comparable, comparator) delay queue элементы доступны после задержки symchronous queue сделав пут ждёт тэйк, без буфера linked transfer queue поддерживает трансфер, отдаёт элемент сразу, если потребитель ждёт, не добавляя его в очередь concurrent linked queue неблокирующая, на связанном списке, но без ожидания полл оффер

15
New cards

locks

condition - альтернативна вэйт нотифай, позволяет иметь несколько вэйт на объект lock альтернатива синхронзайзд, лочится вручную readwritelock имеет пару локов, один для чтения и другой для записи reentrant lock альтернатива синхронайзд, но один потомк может захватывать замок несколько раз, счётчик блокировок увеличивается stamped lock имеет три типа блокировки readlock() на чтение writelock() на запись optimisticread() без блокировки все они возвращают штамп, который впоследующем надо передать в метод для разблокировки unlock

16
New cards

ReentrantReadWriteLock

позволяет нескольким потокам читать одновременно, а писать можно только одному подходит, когда много операций чтения и мало изменений несколько потоков могут читать и, если придёт поток писатель, он будет ждать пока те дочитают и наоборот