Java Guru 🤓
13.2K subscribers
900 photos
15 videos
773 links
Канал с вопросами и задачами с собеседований!

По сотрудничеству и рекламе: @NadikaKir

Канал в перечне РКН: https://vk.cc/cJrSQZ

Мы на бирже: telega.in/channels/javatasks/card?r=lcDuijdm
Download Telegram
ReentrantLock

Примитив синхронизации, с помощью которого можно установить границы критической секции. Тред, перед входом в критическую секцию должен сделать захват c операцией lock(), после выхода из крит. секции — сделать unlock(). Другой тред в это время ожидает на lock'е (можно указывать таймаут ожидания), либо может проверить доступность через tryLock().

ReentrantLock обязательно нужно освобождать (такое кол-во раз, сколько раз он был захвачен), в противном случае будет thread starvation у других тредов, ожидающих у границы критической секции.
ReentrantLock может быть «честным» (fairness = true), тогда приоритет отдается тредам, ждущих на нем наибольшее кол-во времени, но это вроде как уменьшает производительность


lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock()
}
👍20🔥2
Какой результат работы программы?
👍21
Какой результат работы программы?
Anonymous Quiz
48%
1 2
1%
2 1
4%
Ошибка времени выполнения
47%
Ошибка компиляции
👍32🎉4
Countdown Latch/Cyclic Barrier

CountdownLatch («защелка») — примитив синхронизации, с помощью которого, например, основной thread может ожидать выполнения работы остальных N тредов. Треды, выполняющие работу, выполняют countDown() на защелке, основной тред ожидает на операции await(). Когда счетчик достигает нуля, основной тред продолжает работу.

Для синхронизации N тредов (все ждут всех) и переиспользования используется
CyclicBarrier, ему также можно указывать действие (через Runnable), выполняемое после синхронизации всех-со-всеми
👍16
Каким будет результат компиляции и выполнения следующего кода?
👍8
👍11❤‍🔥2
Способы запустить поток?

• Переопределить Thread#run(), запустить через Thread#start()
• new Thread(Runnable).start()
• Через
ExecutorService, используя utility-класс Executors
👍20🔥6❤‍🔥21
Какой будет результат компиляции и выполнения кода?
👍21🔥42
Какой будет результат компиляции и выполнения кода?
Anonymous Quiz
53%
I'm child
18%
I'm parent
3%
I'm child I'm parent
6%
I'm parent I'm child
3%
Ошибка выполнения
17%
Ошибка компиляции
👍21🔥8🌭3🌚1
ThreadLocal

Класс, предоставляющий доступ к операциям get/set в области видимости треда. Под капотом содержит кастомную реализацию мапы со слабыми ссылками на ключи-треды. Каждый тред имеет доступ только к своим данным.
👍15🔥3🤩3
Каким будет результат выполнения данного кода?
👍12🔥1
Каким будет результат выполнения данного кода?
Anonymous Quiz
25%
True
70%
False
1%
Ошибка времени выполнения (RuntimeException)
4%
Ошибка компиляции
🥱25🔥13👍8🤔3😱1
ConcurrentHashMap

ConcurrentHashMap имеет разные реализации в 1.7 и 1.8 (что стало для меня неожиданностью).
Раньше параллелизм основывался на идее сегментирования хэштаблицы на основе заданного уровня параллелизма.
Начиная с Java 8 — это единый массив бакетов с lock-free (локинг на первой ноде бакета с cas-циклом) и конкурентным ресайзингом.
Частичная реализация ConcHashMap (аля Java 8) с нуля
👍12🔥5🤯5
Что напечатает следующий код?
🔥12😱4👍3
Что напечатает следующий код?
Anonymous Quiz
29%
Object 3 String 3
9%
String 3 String 3
49%
Object 5 String 5
13%
String 5 String 5
👍18🔥12🥱5😱3
ConcurrentSkipListMap

Lock-free структура данных, хранящая упорядоченный набор элементов, с O(log N) временем доступа/удаления/вставки и weakly-consistent итераторами. Под капотом содержит структуру SkipList, предоставляющую собой слои связных списков, от верхнего к нижнему, элементы верхнего списка ссылаются на элементы нижнего списка под ними. Вероятность попадания элемента при вставке в самый нижний список — 1.0, далее она равняется p (либо 1/2, либо 1/4 как правило) — вероятности попадания элемента из нижнего списка в верхний. Таким образом, на самом верхнем будет вставлено минимальное кол-во элементов. Skiplist — вероятностная структура данных. Подробнее и доходчиво про skiplist описано здесь. Полезна, если стоит задача отсортировать поток событий, одновременно читаемый несколькими тредами, которым нужно делать срез по временному интервалу. Более медленные операции по сравнению с ConcurrentHashMap
👍14🌭3🔥2🤩1
Каков результат выполнения следующего кода?
👍8🐳7🔥2🤩2🥴2
Deadlocks, условия наступления, как избежать

• Условия наступления — эксклюзивность доступа к ресурсам, наличие циклов в графе ожиданий ресурсов, отсутствие таймаутов на ожидание
• Как избежать — задать порядок доступа к ресурсам. Всегда обращение в порядке либо Thread1->Thread2, либо Thread2->Thread1
👍7🔥2
Что произойдет в результате компиляции и выполнения данного кода?
👍7🔥32
Что произойдет в результате компиляции и выполнения данного кода?
Anonymous Quiz
44%
Cкомпилируется и запустится без ошибок
20%
Ошибка выполнения
35%
Ошибка компиляции
👍28🤯12🔥2🍌2🎉1