|
|
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Встретился мне замечательный кусок кода с вот таким TODO (как в заголовке). Дело в том, что сам я с этим пока не очень дружу. Насколько я понял, ситуация следующая. Есть ConcurrentMap в котором по ключу лежит значение. В отдельном потоке в эту map добавляются пары. Другие потоки (каждый в отдельности) при вызове определенного метода ждут с помощью бесконечного цикла пока в этой map не появится нужное им значение по известному каждому конкретному потоку уникальному ключу. Выглядит это всё как-то сложно и не эффективно. Как принято в промышленных системах решать такие задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 05:07 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
ThreadPoolExecutor? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 05:59 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Hett, Я подумывал о чем-то типа Locks или что-то такое. Ведь задача получается в том, чтобы подождать пока некоторое значение не будет доступно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 06:22 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
по описанию, стандартный wait.... notify / notifyAll при чем и зачем тут java.util.concurrency мне совершенно не понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 07:57 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Для начала хорошо бы определится, какую именно проблему хочется решить. Холостые циклы заменить на блокировку? Или поменять ожидающие потоки на колбэки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:02 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
jxcoderКак принято в промышленных системах решать такие задачи? Издатель-подписчик и Гугл в помощь. Делаешь надстройку над map, которая по добавлению ключа делает рассылку события - добавлен ключ такой-то. Другие потоки подписываются на это событие и просыпаясь проверяют их ли ключ. (Или вообще ядовитая пилюля смерти пришла :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 08:03 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевjxcoderКак принято в промышленных системах решать такие задачи? Издатель-подписчик и Гугл в помощь. Делаешь надстройку над map, которая по добавлению ключа делает рассылку события - добавлен ключ такой-то. Другие потоки подписываются на это событие и просыпаясь проверяют их ли ключ. (Или вообще ядовитая пилюля смерти пришла :) ) https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 09:12 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 09:18 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Сергей Арсеньев Тогда уж и про ObservableMap бы ссылку привел. Это вообще не то. Там же один поток :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 09:37 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭто вообще не то. Там же один поток :) Так сначала надо узнать, что что-то добавили, а уж потом спамить потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 17:24 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
jxcoderЗаменить бесконечный цикл на что-то из java.util.concurrency Пять вещей, которые вы не знали о ... пакете java.util.concurrent. Часть 1 , Часть 2 (см. ScheduledExecutorServices) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2017, 20:31 |
|
||
|
Заменить бесконечный цикл на что-то из java.util.concurrency
|
|||
|---|---|---|---|
|
#18+
Надо сохранить блокирование. Я сейчас выбрал SynchronousQueue. Делаю вместо бесконечного цикла вот так: Код: java 1. Соответственно, в другом месте заполняю эту map из этих queue ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2017, 02:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39473517&tid=2122832]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
86ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 415ms |

| 0 / 0 |
