Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Заменить бесконечный цикл на что-то из java.util.concurrency / 12 сообщений из 12, страница 1 из 1
16.06.2017, 05:07
    #39472759
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Встретился мне замечательный кусок кода с вот таким TODO (как в заголовке).

Дело в том, что сам я с этим пока не очень дружу.

Насколько я понял, ситуация следующая.

Есть ConcurrentMap в котором по ключу лежит значение. В отдельном потоке в эту map добавляются пары.

Другие потоки (каждый в отдельности) при вызове определенного метода ждут с помощью бесконечного цикла пока в этой map не появится нужное им значение по известному каждому конкретному потоку уникальному ключу.


Выглядит это всё как-то сложно и не эффективно.

Как принято в промышленных системах решать такие задачи?
...
Рейтинг: 0 / 0
16.06.2017, 05:59
    #39472766
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
ThreadPoolExecutor?
...
Рейтинг: 0 / 0
16.06.2017, 06:22
    #39472771
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Hett,

Я подумывал о чем-то типа Locks или что-то такое.

Ведь задача получается в том, чтобы подождать пока некоторое значение не будет доступно.
...
Рейтинг: 0 / 0
16.06.2017, 07:57
    #39472787
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
по описанию, стандартный wait.... notify / notifyAll
при чем и зачем тут java.util.concurrency мне совершенно не понятно
...
Рейтинг: 0 / 0
16.06.2017, 08:02
    #39472792
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Для начала хорошо бы определится, какую именно проблему хочется решить. Холостые циклы заменить на блокировку? Или поменять ожидающие потоки на колбэки?
...
Рейтинг: 0 / 0
16.06.2017, 08:03
    #39472793
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
jxcoderКак принято в промышленных системах решать такие задачи?
Издатель-подписчик и Гугл в помощь.
Делаешь надстройку над map, которая по добавлению ключа делает рассылку события - добавлен ключ такой-то. Другие потоки подписываются на это событие и просыпаясь проверяют их ли ключ. (Или вообще ядовитая пилюля смерти пришла :) )
...
Рейтинг: 0 / 0
16.06.2017, 09:12
    #39472839
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Сергей АрсеньевjxcoderКак принято в промышленных системах решать такие задачи?
Издатель-подписчик и Гугл в помощь.
Делаешь надстройку над map, которая по добавлению ключа делает рассылку события - добавлен ключ такой-то. Другие потоки подписываются на это событие и просыпаясь проверяют их ли ключ. (Или вообще ядовитая пилюля смерти пришла :) )
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html
...
Рейтинг: 0 / 0
16.06.2017, 09:18
    #39472845
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Blazkowicz,
Тогда уж и про ObservableMap бы ссылку привел.
YouTube Video
...
Рейтинг: 0 / 0
16.06.2017, 09:37
    #39472856
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Сергей Арсеньев Тогда уж и про ObservableMap бы ссылку привел.

Это вообще не то. Там же один поток :)
...
Рейтинг: 0 / 0
16.06.2017, 17:24
    #39473329
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
BlazkowiczЭто вообще не то. Там же один поток :)
Так сначала надо узнать, что что-то добавили, а уж потом спамить потоки.
...
Рейтинг: 0 / 0
16.06.2017, 20:31
    #39473433
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
jxcoderЗаменить бесконечный цикл на что-то из java.util.concurrency Пять вещей, которые вы не знали о ... пакете java.util.concurrent. Часть 1 , Часть 2
(см. ScheduledExecutorServices)
...
Рейтинг: 0 / 0
17.06.2017, 02:24
    #39473517
jxcoder
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заменить бесконечный цикл на что-то из java.util.concurrency
Надо сохранить блокирование.

Я сейчас выбрал SynchronousQueue.

Делаю вместо бесконечного цикла вот так:

Код: java
1.
queues.map(queueId).take()



Соответственно, в другом месте заполняю эту map из этих queue
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Заменить бесконечный цикл на что-то из java.util.concurrency / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]