Существует только одно различие между TestNG и JUnit в этой конкретной области: JUnit будет создавать новый экземпляр вашего теста перед каждым методом тестирования, TestNG не будет.
Это означает, что с TestNG значения, сохраненные в полях методами тестирования, будут сохраняться между вызовами, что очень полезно, если этот объект сложный и требует времени для создания. Это также помогает ускорить выполнение тестов, поскольку вам не нужно каждый раз воссоздавать это состояние с нуля.
Если вы хотите, чтобы это состояние каждый раз сбрасывалось, просто поместите код инициализации в @BeforeMethod, как вы делаете это с JUnit (за исключением того, что он называется @Before).
Что касается многопоточности, я не понимаю, почему вы говорите, что нет гарантии относительно этого значения, можете ли вы быть более конкретным?