Вам нужны две вещи:
1) Вам нужна структура данных, которая будет вращаться между портами по порядку, навсегда.Это называется «круговой структурой данных».
2) Вам необходимо убедиться, что структура данных является общей для потоков, то есть когда один поток начинает использовать портдля выполнения каких-либо действий структура данных уведомляется о том, что этот порт занят, а затем конкретный порт блокируется.
Простой подход может заключаться в использовании здесь синхронизированной циклической очереди с блокировками.в каждом из двух слотов.
Как только вы добавите репрезентативную блокировку каждого порта в очередь, вы можете иметь каждый поток, блокирующий этот конкретный порт во время использования.Как только замок снят, работа может начаться заново.
Итак, сначала мы создадим очередь с 2-мя блокировками init, и на сервере будет установлен итератор в очереди.
Когда поступит запрос - поток запросит у сервера порт.Сервер проверит, заблокирован ли текущий (1-й) слот.Если это так, он будет ожидать --- когда разблокирован, он будет асинхронно передавать блокировку потоку и увеличивать позицию в очереди.Затем поток заблокирует этот ресурс, обработает запрос и разблокирует его.Как только поток завершит обработку, он разблокирует ресурс.Между тем, если приходит второй поток, сервер может назначить второй порт, если этот порт свободен.
Конечно, здесь существует потенциальная тупиковая ситуация: если один поток не завершится, сервер застрянет в ожидании разблокировки блокировки, прежде чем он перейдет к следующему порту.
http://www.koders.com/java/fid13E588928D0C01917AC9C30E35D802BDBA546368.aspx?s=Queue#L23