Я хоть и понимаю, что прошло два года.
Лучше сделать так:
Главный поток чекает дочернии потоки и следит за их состоянием.
Весь функционал живёт в дочерних.
Передача между соседними дочерними потоками будет создана через отдельный класс.
И самое главное синхронизавать потоки, ибо скорость обработки выше скорости передачи сети.