Мой ответ на этот вопрос заключается в том, чтобы избежать создания ситуаций, в которых вы можете испытывать гоночные условия при разумном использовании интеллектуального дизайна и существующих технологий. Например, если ваше приложение MT использует автономные рабочие элементы, вы можете встроить JMS-брокер в свое приложение для использования в качестве механизма связи между потоками. Аналогично с системными ресурсами, которые могут зависеть от состояния гонки, не делайте эти части многопоточными. Если у вас есть файлы, которые нужно записать, сделайте так, чтобы один поток отвечал за их запись с использованием информации, передаваемой через подсистему JMS.
В конечном счете, нет способа раскраски по номерам для тестирования кода MT, чтобы убедиться, что он не уязвим для состояния гонки.