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

Всем привет, есть вопрос по параллельным вычислениям. Хочу с помощью

сервлета организовать параллельную обработку запросов. Запрос приходит в сервлет, там он перенаправляется в класс где по URI и методу для него сопоставляется таска, которая ложится в блокирующую очередь. В другом классе с помощью ExecutorService таски параллельно выполняются и выдается ответ. В чем суть вопроса: Как связать закидывание в очередь и выполнение задач? Хочется 1 раз создать поток и останавливать его, когда очередь пуста. А при добавлении задачи проверялось поток активен или нет. Был бы признателен за совет/ресурс, а то не могу в голове это представить.

21 ответов

15 просмотров
Илья-. Автор вопроса

ну убери проверку while(!QUEUE. isEmpty()) { и будет бесконечно работать

Илья .
screenshot

Я подумал о том что модно ввделит доп класс который будет управлять временем жизни потока и очередью соответственно. У этого надоьсделать метод добавления в очередь и в этот момент запускать тред чтоб он эту очередь разгребал. Соответственно если добавляет а треду уже запущен то ничего и делать не надо

Borislaw P
Я подумал о том что модно ввделит доп класс которы...

Хотя второй ваш скрин показывает что вы и так запускаете каждую задачу в очереди в отдел ном потоке. Не очень понимаю зачем вы делаете вейт в конце на текущем потоке

Илья-. Автор вопроса
Borislaw P
Хотя второй ваш скрин показывает что вы и так запу...

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

Илья .
Я хотел чтобы у меня создался поток только один ра...

Что есть обработчик очереди? ExecutorService? Он же сам у себя под капотом будет менеджерить как ему запускать задачи. Я просто не уверен что понимаю вашу задумку.

Илья-. Автор вопроса
Borislaw P
Что есть обработчик очереди? ExecutorService? Он ...

После добавления в очередь задачи, я хочу проверять работает ли у меня поток с ExecutorService. Если да, то ничего не делаем, а иначе запускаем исполнение. И пока очередь у нас не пуста ExecutorService делает свою работу, а как только он ее сделал, то заснет и будет ждать пока опять в очередь не поступят задачи.

Илья .
После добавления в очередь задачи, я хочу проверят...

ExecutorService это сам и делает без всякой очереди же

Илья-. Автор вопроса
Алексей
ExecutorService это сам и делает без всякой очеред...

Да, но задача состоит в том, чтобы их подружить

Илья .
Я хотел чтобы у меня создался поток только один ра...

Если хочешь с этим побаловаться, то бери котлин и корутины Либо лум

Alexandr ∨∧‾ Emelyanov
Если хочешь с этим побаловаться, то бери котлин и ...

Зачем здесь лум, если человек хочет парковать поток, когда нет работы.

Ilya Starchenko
Зачем здесь лум, если человек хочет парковать пото...

что парковать, если executorservice и так в новом потоке все делает

Алексей
что парковать, если executorservice и так в новом ...

Ну я не изначальный вопрос отвечал, а на последний.

Я правильно понимаю, что вам хочется, чтоб поток "не использовался", пока очередь пустая?

Илья .
Да

Тогда не переживайте, blocking queue вся сделана на condition, которые в свою очередь сделаны на pthread_cond_signal, так что ваш поток будет спать, пока ему не посигналят, что в очереди что-то есть.

Илья-. Автор вопроса
Илья .
После добавления в очередь задачи, я хочу проверят...

Executor service предоставляет вам вам для запуска задач. Он сам решает на каком потоке и когда ее исполнять. Вам ничего проверять не надо.

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта