Большинство методов экземпляра в вашем API не должны быть потокобезопасными вообще.Код клиента должен решить - в зависимости от контекста - синхронизировать доступ или нет, и при какой степени детализации.Только статические (классовые) методы могли бы обеспечить безопасность потоков, и это не должно быть обязательным.
Чтобы ответить на ваш вопрос, я не думаю, что существует тривиальный, не зависящий от контекста способ тестирования проблем потоков.Проблемы с многопоточностью, такие как гонки данных или взаимоблокировки, в большинстве случаев очень трудно найти: низкая вероятность, очень зависит от входных данных, недетерминированные и т. Д.