Предполагая, что вы хотите знать , как реализовать такую вещь: она называется «конвейерным шаблоном».Если это , а не домашнее задание, вы можете повторно использовать существующую реализацию этого шаблона.Один доступен по адресу:
http://code.google.com/p/pipelinepattern/
Если это домашняя работа, то ваш учитель может ожидать, что вы напишите ее самостоятельно.Хорошей отправной точкой является этот двухэтапный конвейер (где один поток читает строки из файла, а другой поток печатает строки):
http://rosettacode.org/wiki/Synchronous_concurrency#Java
В приведенном выше примере два этапасвязаться через BlockingQueue
(т.е. этап 1 записывает в очередь, а этап 2 читает его).Если этап 1 последовательно быстрее, чем этап 2, очередь станет довольно большой).Вы можете принудительно задействовать этапы в lockstep, используя SynchronousQueue
вместо этого [см. Комментарий № 1 к этому ответу, почему].
Если вам нужен пятиступенчатый конвейер, вам нужно расширить его, имея5 потоков, которые имеют 4 очереди между ними:
in -> [s1] -> q12 -> [s2] -> q23 -> [s3] -> q34 -> [s4] -> q45 -> [s5] -> out
Выше, каждый [s*]
представляет стадию (поток), а каждый qAB
представляет Очередь, в которую ставится [sA]
и удаляется из[sB]