Вызов метода @async внутри синхронизированного блока в java

У меня есть метод обслуживания, который выполняет сохранение БД в зависимости от статуса и асинхронно отправляет почту. Поскольку к нему обращаются одновременно, я делаю блок синхронизированным.

код:

     synchronized(this){
           status = dao.getStatus(id);
           if(status != request.getStatus()) {
              dao.save(obj);
              process.sendMail();
           }
      }


 class Process {  
    @Async
    public void sendMail() {}
}

Повлияет ли это на работу с почтой в фоновом режиме? будет ли ожидающий поток ждать завершения почтовой операции?

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

dunni 10.09.2018 07:34

Нет. Это в другом классе.

Manopriya 10.09.2018 07:53
0
2
615
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

если ваш метод

@Async
public void sendMail() {}

находится в том же классе, тогда это не сработает.

Для @Async

  1. он должен применяться только к общедоступным методам

  2. самовызов - вызов метода async из того же класс - не пойдет

Итак, я думаю, что ваш метод sendMail будет работать нормально, если он находится в другом классе, а не в блоке synchronized.

будет ли ожидающий поток ждать завершения почтовой операции?

Manopriya 10.09.2018 08:19

Другие вопросы по теме