Хорошо, я объясню, что я прошу, подав пример.Контролируемый вызов Runnables на потоках
позволяет сказать, что им пытаются реализовать параллельный алгоритм слияния при Дано:
дб является массивом, где дб [я] является ArrayList объектов.
j - его размер. Слияние (дБ, CMP, I, J) является работоспособным, которая объединяет дБ [J]вдБ [I].
cmp - соответствующий компаратор.
Это то, что я во-первых Done:
ExecutorService e = Executors.newFixedThreadPool(3);
while (j>0)
for (i=0;i<j;i++,j--)
e.execute(new Merger<E>(db,cmp,i,j));
но некоторые слияния были начаты в то время как предыдущие слияния, которые необходимо завершить первый еще не были окончены. (не говоря уже о том, что бегущая нить закончила цикл до того, как слияние было закончено ...), и это заставило мою программу выпустить Exeception.
Это то, что я могу делать, но хочу сделать, и поэтому нужна ваша помощь:
ExecutorService e = Executors.newFixedThreadPool(3);
while (j>0) {
for (i=0;i<j;i++,j--)
e.execute(new Merger<E>(db,cmp,i,j));
wait for e to announce that all runnables have finished running;
}
на мой взгляд, это должно работать, если вы думаете, не то объяснить, почему, но в любом случае, я хочу знаете, как это сделано.
(основно я могу осуществить свою собственную версию FixedThreadPool, чтобы сделать его heppen, но я скорее не)
нравится как?ваш ответ слишком абстрактен. –