2013-06-02 7 views
0

Насколько я знаю, пулы потоков (java.util.concurrent.Executor class) предоставляют очередь задач для всех потоков в пуле. Поэтому я действительно не знаю, какой поток выполнит мою задачу. Но мне нужно иметь очереди задач, назначенных каждому потоку. Как мне это сделать?Очереди для каждого потока в пуле потоков

+3

Почему вы заботитесь о том, какой поток выполняет одну конкретную задачу до тех пор, пока в конечном итоге это будет сделано? – fge

ответ

1

Если вы хотите, чтобы определенные потоки выполняли определенные задачи, вам не подходит стандартный пул Threadpool. Но вы можете использовать несколько Threadpool с одним потоком в каждом, чтобы решить вашу проблему.

1

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

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

+0

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

+0

@notnavol Я был бы осторожен в том, чтобы разбивать вход таким образом. Если вы отрезаете слишком мелко, вы можете получить решение, в котором накладные расходы составляют 10 раз (или даже намного больше). Это может сделать многопоточные решения намного медленнее, чем однопоточное решение. –

Смежные вопросы