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

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

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

21 ответов

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта