在Java中的同步块内调用@async方法

时间:2018-09-10 05:26:56

标签: java spring-boot asynchronous concurrency

我有一种服务方法,该方法根据状态执行数据库保存并异步发送邮件。由于它是同时访问的,因此我正在使该块同步。

代码:

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


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

这会影响后台邮件操作吗?等待线程是否将等待邮件操作完成?

1 个答案:

答案 0 :(得分:0)

如果您的方法

@Async
public void sendMail() {}

在同一个班级,所以无法正常工作。

对于@Async

  1. 它必须仅应用于公共方法

  2. 自我调用–从同一内部调用async方法 上课–不起作用

因此,我认为您的方法sendMail可以正常工作,只要它与synchronized块位于不同的类中即可。