Вызов метода @async внутри синхронизированного блока в Java - PullRequest
0 голосов
/ 10 сентября 2018

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

код:

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


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

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

1 Ответ

0 голосов
/ 10 сентября 2018

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

@Async
public void sendMail() {}

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

Для @Async

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

  2. самовывоз - вызов асинхронного метода из того же самого класс - не сработает

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...