Я обнаружил презентацию JavaOne Билла Пью, Брайана Гетца и Клиффа Клик на предмет тестирования параллельного кода. Они предложили такой подход, ведь я думаю, что это лучшее, что я слышал:
Ряд производителей создают объекты с сохранением состояния и потокобезопасные с помощью зависящей от состояния реализации hashCode. Поскольку объекты отправляются через предполагаемую точку синхронизации, хеш-коды суммируются (локально для потока). Аналогично, потребители на другой стороне шлюза суммируют хэш-коды.
В конце теста мы суммируем все результаты для производителей и потребителей соответственно. Если две суммы равны, тест успешно пройден.
Мы также можем использовать XOR в качестве альтернативы сумме. На самом деле подойдет любая коммутативная операция. Просто помните, что сам тестовый жгут не должен вводить никакой дополнительной синхронизации.