Я предполагаю, что вы создаете отдельный поток для каждого клиента, потому что у клиента может быть другой разговор с компьютером, когда это не его очередь? Возможно, он спрашивает, чья это очередь, или участвуете в чате с другими игроками или что-то в этом роде? Я точно не понимаю, почему вы создаете отдельную ветку для sendMessage и readMessage. Как правило, система читает с клиента, а затем делает ответ в том же потоке. Это его l oop: readMessage, сформулировать ответ, sendMessage, повторить.
Предполагая, что мое понимание выше верно, вам все еще понадобится центральный агент, LoveLetterGame, к которому принадлежат эти ConsoleClients, из которых только один для любого активного LoveLetterGame. (LoveLetterGame должен быть тем, который создает экземпляры ConsoleClient. Он должен включать в себя AtomicInteger с номером его очереди. AtomicInteger включает в себя поточно-ориентированные методы для тестирования и изменения значения, плюс у вас должно быть правило, что только поток для Текущий игрок может изменить значение.
PS Я большой поклонник игры Love Letter.
PPS Используйте CamelCase для Java, а не Underscore_separation.