Ответ 1
Если вы заранее знаете количество сообщений, обмениваемых между участниками, вы можете использовать java.util.concurrent.CountDownLatch
для отслеживания количества сообщений. В актерах, после каждой обработки сообщения, сделайте
latch.countDown()
и в вашем основном потоке сделайте
latch.await()
Это заставит ваш основной поток ждать, пока счет защелки не достигнет нуля.
Если вы заранее не знаете количество сообщений, но имеете условие, указывающее на финиш, вы можете использовать java.util.concurrent.locks.Condition
. В актерах, когда ваше состояние удовлетворено, сделайте
if (conditionSatisfied)
condition.signal()
и в вашем основном потоке сделайте
while (!conditionSatisfied)
condition.await()
чтобы он дождался выполнения условия.
См. javadocs CountDownLatch
и Condition
для получения более подробной информации.
Смотрите этот Gist, например, используя Condition
.