Вы только смоделировали детей, а не фактическую кольцевую развязку. Я сомневаюсь, что каждому ребенку нужна своя нить, если она не обязательна.
То, что кажется более полезным, - это создать три потока, по одному для каждой очереди и один для кольцевой развязки. Карусель - это рабочий поток, а дочерние очереди - потоки производителя. В вашей кольцевой нити будет круговой буфер с детьми, у каждого из которых будет «время игры», которое определяется случайным образом при входе в кольцевую развязку. Поток будет периодически проверять «время игры» каждого дочернего элемента, а когда срок действия любого из них истечет, он случайным образом выбрасывает их в северную или южную очередь и поднимает семафор, в котором открыто пространство.
Каждый из двух потоков очереди будет ожидать семафора, и каждый раз, когда он поднимается, первый, кто его получает, помещает своего дочернего элемента в обходную структуру со случайно выбранным «временем игры».
В качестве альтернативы вы можете сделать так, чтобы окольный поток выбрасывал людей на восточную и западную игровые площадки в произвольном порядке, а потоки очереди отвечали за их опустошение. Необходимо убедиться, что каждая общая коллекция (циклический буфер и фактический список дочерних элементов в каждом из потоков очереди) правильно обрабатывается с точки зрения синхронизации. Вам понадобятся только два класса: обходной поток и поток очереди, но будет два экземпляра потока очереди, один для севера и один для юга.