2015-10-24 1 views
0

Мне нужно написать код для параллельного Mergesort, и моя проблема в том, что если реализация сортировки слияния хочет создать новый поток, она должна проверить, есть ли доступный нить или нет (поэтому я создал Threapool (max 5 Threads) .Это также работает, но моя проблема заключается в том, что я должен использовать только 5 потоков без их повторного использования.Макс. созданный Threads with Threadpool Java

Это означает, что если нет доступных слотов нити, поток просто выполняет для своей части массива традиционный рекурсивный алгоритм сортировки слияния.

int nThreads = 5; 
    ExecutorService executor = Executors.newFixedThreadPool(nThreads); 
    for (int i = 1; i < 10; i++){ 
     Runnable worker = new Mergesort(array); 
     executor.execute(worker);   
    } 
    executor.shutdown(); 

    while(!executor.isTerminated()) { 

    } 

ответ

0

Есть несколько способов сделать это, как уже упоминались в этой SO answer. Особенно относятся к отву er пользователем danben.

Тем не менее, вам необходимо убедиться в том, что счет 5, который вы укажете, включает в себя основную нить или нет, то есть число 5 означает mainthread + 4 нити или 5 рабочих потоков.

Надеюсь, это указывает на то, что вы решили решить свою проблему.

+0

Спасибо вам большое! Я думаю, что CallerRunsPolicy() - это то, что нужно искать :) – Merve

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

  • Нет связанных вопросов^_^