170 похожих чатов

Привет А что будет если вызвать у ConcurrentHashMap метод computeIfAbsent с

теми же аргументами сразу после такого же вызова, но до того как он (предыдущий) довычислит выражение и положит пару ключ-значение?

7 ответов

13 просмотров

Из доки выходит, что вызовется один раз The supplied function is invoked exactly once per invocation of this method if the key is absent, else not at all. Some attempted update operations on this map by other threads may be blocked while computation is in progress, so the computation should be short and simple.

RAFIZ- Автор вопроса
Alexey Genus 😎
Из доки выходит, что вызовется один раз The suppli...

о спасибо! как-то я сам не нашел а ссыль можно?

RAFIZ
о спасибо! как-то я сам не нашел а ссыль можно?

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/ConcurrentHashMap.html#computeIfAbsent(K,java.util.function.Function) Или можно просто в IDEA посмотреть

RAFIZ- Автор вопроса
Alexey Genus 😎
https://docs.oracle.com/en/java/javase/17/docs/api...

я в коде провалился и у меня не было описания:) спасибо!

Alexey Genus 😎
Из доки выходит, что вызовется один раз The suppli...

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

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

Может быть, я неточно выразился, но я именно это и имел в виду: лямбда второго аргумента не вызовется второй раз, потому что значение уже будет доступно

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
9
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Карта сайта