Необходимо ли синхронизировать методы классов, которые не имеют состояния?

Необходимо ли синхронизировать методы классов, которые не имеют состояния? Например, у меня есть класс:

@Slf4j
public class SomeServiceImpl implements SomeServiceService {

    @Setter
    private SomeDao someDao;

    @Override
    public void doSomething(Event event) {
        
        Map<String, Object> map = new HashMap<String, Object>();

        val date = new Date();
        event.put("someDate", date);

        val someId = UUID.randomUUID().toString();
        event.put("someId", someId);
        ...
        someDao.save(event);
    }
}

Если выполнить этот код в нескольких потоках, каждый поток создаст свою копию локальных переменных? Этот метод будет вызываться из множества потоков, например. И я не уверен, что без синхронизации можно обойтись здесь. Но и не уверен, что она нужна. Например, что будет в случае @Utils-классов, нужно ли синхронизировать их методы? DAO здесь - это Spring синглтон.


Ответы (1 шт):

Автор решения: Klioda

Локальные переменные пересекаться не будут -- у каждого потока свой стек. Вопрос только к полю someDao -- надо ли синхронизировать зависит от реализации.

→ Ссылка