2014-07-10 3 views
0

У меня есть блок кода, как этотКак добиться фиксированного пула потоков без использования ExecutorService

static ExecutorService executor = Executors.newFixedThreadPool(4); 
    Runnable worker = new CsvToJavaObject(newFilePath); 
    executor.execute(worker); 

Я хочу, чтобы ограничить число потоков до п (4), а не использовать Executor Service.How я могу это сделать?

+0

Соберите функции ExecutorService самостоятельно. Почему вы хотите это сделать? – Kayaman

+0

Итак, что вы пробовали до сих пор, чтобы добиться «не использовать службу-исполнитель»? – coreJavare

+0

Я попытался использовать Thread.activeCount(), но думаю, что здесь неверно, он будет включать в себя и другие потоки. I начал с использования массива потоков. Запуск n задач и последующий опрос, если они живы в цикле массива. Если тогда меньше ni порождает другую задачу. но она не выглядит хорошо. – avinashkr

ответ

1

Что относительно ThreadPoolExecutor?

ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, 5, 5, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); 
+0

Нет, сэр, я искал управление вручную. – avinashkr

+0

Удачи вам в этом. –

0

Является ли «4» подсчетом ваших сердечников? Вы пытаетесь ограничить параллельные исполнения количеством ядер в системе? Если это так: я бы просто использовал TPL (например, «Новая задача (действие)»), которая уже относится к вашей системе. Если вы хотите, вы можете даже вручную установить количество потоков, которые предлагает threadpool, см. ThreadPool.SetMinThreads, но есть только несколько ситуаций, где это имеет смысл ...

Редактировать: Моя ошибка, подумал, что это aC# issue ...

0

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

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

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