volatile означает, что переменная не кэшируется в "памяти потока", а всегда используется "основное значение", с данном случае это схоже с тем, что переменная синхронизированна собой же.
С учетом того, что это не просто переменная, а поле к классе, которое может быть много где использовано,
то у вас может получиться так, например, что один поток вызовет somePublicMethod, а второй поток захочет изменить переменную где то в середины выполнения метода.
Рекомендую вам сделать синхронизацию методов доступа к полю по инстансу объекта. (тот же synchronized на метод)