Я не уверен, что полностью выполнил ваши требования, но вот алгоритм высокого уровня:
Создайте необходимое количество потоков и поместите их в массив.
Теперь, начиная со второго потока до последнего, каждый поток должен выполнить join()
в предыдущем потоке; это будет способствовать тому, что каждая команда выполняет свою часть обработки и обновления после завершения своей предыдущей работы.
Возможный код:
Объявление класса потока
class WaitingThread extends Thread
{
private Thread previousThread;
public WaitingThread(final Thread previous)
{
this.previousThread = previous;
}
public void run()
{
doParallelTask();
if(previousThread != null)
{
previousThread.join();
}
doProcesingAndUpdating();
}
}
Объявление и инициализация массива;
final Thread [] threads = new Thread[25];
for(int i = 0; i < 25; i++)
{
if(i == 0)
{
threads[i] = new WaitinThread(null);
}
else
{
threads[i] = new WaitingThread(threads[i - 1]);
}
}
Надеюсь, это поможет.
PS: Должен признать, что в приведенной выше модели имеет смысл сделать doParallelTask()
, используя несколько потоков, и сделать 25 doProcessingAndUpdate()
, используя один поток.