Что будет выведено в результате выполнения данного кода ?
Anonymous Quiz
5%
current version: 0.1a
66%
current version: 0.5b
8%
current version: 0.1a current version: 0.5b
21%
Ошибка компиляции
👍23🔥4
ReentrantLock
Примитив синхронизации, с помощью которого можно установить границы критической секции. Тред, перед входом в критическую секцию должен сделать захват c операцией lock(), после выхода из крит. секции — сделать unlock(). Другой тред в это время ожидает на lock'е (можно указывать таймаут ожидания), либо может проверить доступность через tryLock().
ReentrantLock обязательно нужно освобождать (такое кол-во раз, сколько раз он был захвачен), в противном случае будет thread starvation у других тредов, ожидающих у границы критической секции.
ReentrantLock может быть «честным» (fairness = true), тогда приоритет отдается тредам, ждущих на нем наибольшее кол-во времени, но это вроде как уменьшает производительность
Примитив синхронизации, с помощью которого можно установить границы критической секции. Тред, перед входом в критическую секцию должен сделать захват 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
Какой результат работы программы?
Anonymous Quiz
48%
1 2
1%
2 1
4%
Ошибка времени выполнения
47%
Ошибка компиляции
👍32🎉4
Countdown Latch/Cyclic Barrier
CountdownLatch («защелка») — примитив синхронизации, с помощью которого, например, основной thread может ожидать выполнения работы остальных N тредов. Треды, выполняющие работу, выполняют countDown() на защелке, основной тред ожидает на операции await(). Когда счетчик достигает нуля, основной тред продолжает работу.
Для синхронизации N тредов (все ждут всех) и переиспользования используется CyclicBarrier, ему также можно указывать действие (через Runnable), выполняемое после синхронизации всех-со-всеми
CountdownLatch («защелка») — примитив синхронизации, с помощью которого, например, основной thread может ожидать выполнения работы остальных N тредов. Треды, выполняющие работу, выполняют countDown() на защелке, основной тред ожидает на операции await(). Когда счетчик достигает нуля, основной тред продолжает работу.
Для синхронизации N тредов (все ждут всех) и переиспользования используется CyclicBarrier, ему также можно указывать действие (через Runnable), выполняемое после синхронизации всех-со-всеми
👍16
Каким будет результат компиляции и выполнения следующего кода?
Anonymous Quiz
28%
Ошибка выполнения в строке 12
12%
Ошибка выполнения в строке 13
23%
Код успешно скомпилится и выполнится
38%
Ошибка компиляции
👍11❤🔥2
Способы запустить поток?
• Переопределить Thread#run(), запустить через Thread#start()
• new Thread(Runnable).start()
• Через ExecutorService, используя utility-класс Executors
• Переопределить Thread#run(), запустить через Thread#start()
• new Thread(Runnable).start()
• Через ExecutorService, используя utility-класс Executors
👍20🔥6❤🔥2⚡1
Какой будет результат компиляции и выполнения кода?
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 в области видимости треда. Под капотом содержит кастомную реализацию мапы со слабыми ссылками на ключи-треды. Каждый тред имеет доступ только к своим данным.
Класс, предоставляющий доступ к операциям get/set в области видимости треда. Под капотом содержит кастомную реализацию мапы со слабыми ссылками на ключи-треды. Каждый тред имеет доступ только к своим данным.
👍15🔥3🤩3
Каким будет результат выполнения данного кода?
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) с нуля
ConcurrentHashMap имеет разные реализации в 1.7 и 1.8 (что стало для меня неожиданностью).
Раньше параллелизм основывался на идее сегментирования хэштаблицы на основе заданного уровня параллелизма.
Начиная с Java 8 — это единый массив бакетов с lock-free (локинг на первой ноде бакета с cas-циклом) и конкурентным ресайзингом.
Частичная реализация ConcHashMap (аля Java 8) с нуля
👍12🔥5🤯5
Что напечатает следующий код?
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
Lock-free структура данных, хранящая упорядоченный набор элементов, с O(log N) временем доступа/удаления/вставки и weakly-consistent итераторами. Под капотом содержит структуру SkipList, предоставляющую собой слои связных списков, от верхнего к нижнему, элементы верхнего списка ссылаются на элементы нижнего списка под ними. Вероятность попадания элемента при вставке в самый нижний список — 1.0, далее она равняется p (либо 1/2, либо 1/4 как правило) — вероятности попадания элемента из нижнего списка в верхний. Таким образом, на самом верхнем будет вставлено минимальное кол-во элементов. Skiplist — вероятностная структура данных. Подробнее и доходчиво про skiplist описано здесь. Полезна, если стоит задача отсортировать поток событий, одновременно читаемый несколькими тредами, которым нужно делать срез по временному интервалу. Более медленные операции по сравнению с ConcurrentHashMap
👍14🌭3🔥2🤩1
Каков результат выполнения следующего кода?
Anonymous Quiz
17%
Ошибка компиляции в строке 1
16%
Ошибка компиляции в строке 9
10%
Ошибка выполнения в строке 9
12%
Ошибка компиляции в строке 18
13%
10
27%
15
5%
20
👍18⚡4🤔4🌚2🔥1
Deadlocks, условия наступления, как избежать
• Условия наступления — эксклюзивность доступа к ресурсам, наличие циклов в графе ожиданий ресурсов, отсутствие таймаутов на ожидание
• Как избежать — задать порядок доступа к ресурсам. Всегда обращение в порядке либо Thread1->Thread2, либо Thread2->Thread1
• Условия наступления — эксклюзивность доступа к ресурсам, наличие циклов в графе ожиданий ресурсов, отсутствие таймаутов на ожидание
• Как избежать — задать порядок доступа к ресурсам. Всегда обращение в порядке либо Thread1->Thread2, либо Thread2->Thread1
👍7🔥2