Очереди сообщений - это способ решить вашу проблему.
Если вы хотите передать свой конечный автомат внешними событиями из других потоков, они могут записать эти события в очередь сообщений, которая будет прочитана вашим конечным автоматом.
Если вы хотите, чтобы другие потоки запускали действия с вашего конечного автомата, он может записывать в различные очереди сообщений, каждая из которых связана с потоком, который будет читать из его MQ.
Один недостаток состоит в том, что события сортируются в хронологическом порядке. Если ваш конечный автомат не настроен обработать событие, которое он только что прочитал из очереди, вы должны решить, что делать с этим событием: уничтожить его, вернуть в очередь, запомнить его для дальнейшего использования ...