Мне нужен планировщик в Java, который разделяет пул потоков с другими планировщиками - PullRequest
4 голосов
/ 27 мая 2010

Я уже несколько недель пытаюсь найти решение по этому вопросу. Я возвращаюсь снова и снова к одному и тому же. Java ScheduledThreadPoolExecutor альтернативы ... но это ничего не делает.

То, что я хочу, - это выполнять задания, синхронизированные / последовательно синхронизированные внутри планировщика, имея много планировщиков, которые делают это независимо друг от друга, при поддержке одного пула потоков ...

У меня есть серверное приложение на Java, и мне нужно создать сотни и тысячи планировщиков.

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

Все планировщики могут работать одновременно и независимо, но мне также нужно ограничить число потоков всех планировщиков с помощью пула потоков (не пула потоков на планировщик, а одного пула потоков для ВСЕХ планировщиков!) Также была бы отличной возможность приостановить / возобновить работу и поместить их в группы. какие-либо решения? заранее спасибо!

Ответы [ 7 ]

2 голосов
/ 16 ноября 2010

Вам нужно много планировщиков и один исполнитель. Планировщики не должны сами выполнять задачи, а должны представлять их Исполнителю. Планировщики могут быть реализованы в виде java.util.Timer задач.

1 голос
/ 12 февраля 2011

Вы можете использовать библиотеку потоков HawtDispatch . Он предоставляет API-интерфейс в стиле libdispatch. Для вашего случая использования вы должны создать последовательную очередь для каждого набора задач, которые должны выполняться последовательно. А затем наметьте задачи, которые будут выполнены на них. Например:

DispachQueue q1 = createQueue();
DispachQueue q2 = createQueue();
...
DispachQueue qN = createQueue();

Runnable task = ...
qN.execute(task)  
// or to execute in the future
qN.dispatchAfter(1, TimeUnit.SECOND, task)

Все очереди используют общий пул потоков.

1 голос
/ 28 августа 2010

Рассматривали ли вы использование HawtDispatch и много последовательных очередей? Похоже, что это может сделать, как вы хотите, с простым API. Я думал попробовать это сам. Проект Akka использует это, как я понимаю.

0 голосов
/ 05 октября 2010

Планировщик dhtmlx работает для меня, но эта работа с его собственным подключением к базе данных здесь - это источник и примеры http://dhtmlx.com/docs/products/dhtmlxScheduler/index.shtml?mn и его java-соединитель

0 голосов
/ 02 октября 2010

Может быть, отдельный планировщик, такой как Кварцевый планировщик , будет обслуживать ваши потребности?

0 голосов
/ 29 июля 2010

Я сам пытаюсь найти такое решение. В мире .Net у вас есть централизованный общий пул потоков, предоставляемый системой, который динамически расширяется и сжимается. Моя ситуация такова, что у меня много заданий с низкочастотным обслуживанием, и один поток должен справиться со всеми ними.

Полагаю, вы можете где-нибудь иметь одноэлементного Executor (версию с пулами потоков) и всегда использовать его для планирования задач. Это имитирует поведение .Net.

0 голосов
/ 27 мая 2010

Если вы хотите, чтобы задания выполнялись последовательно в ScheduledThreadPoolExecutor, вы просто создаете агрегированное задание, которое выполняет каждое из фактических заданий в последовательном хранилище, и отправляете его вашему ScheduledThreadPoolExecutor. Хотя, если вам нужны тысячи планировщиков, чтобы работать одновременно, но все же ограничить нет. потоков, вы можете столкнуться с неприятностями - по крайней мере, если задания выполняются слишком долго, и вы начинаете терять расписание.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...