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

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

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

21 ответов

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

ну убери проверку 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 предоставляет вам вам для запуска задач. Он сам решает на каком потоке и когда ее исполнять. Вам ничего проверять не надо.

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта