是弹簧异步传递对象线程安全到以前的更新

我们使用spring异步框架,示例代码如下,如果Entity对象是可变的并且在调用put之前已经更新,JVM会保证put会看到更改吗?

@Async("daoExecutor") @Repository public class GenericDaoImpl implements GenericDao { public CompletableFuture put(Entity e) { } } 

是。

通过将实际方法调用包装在Callable并将该callable提交给ThreadPoolExecutor ,或多或少地实现了@Async 。 该提交是通过BlockingQueue完成的。 JDK提供的默认BlockingQueue实现(Spring使用)都是线程安全的。 从队列中取出之前添加到队列中。

因此,在调用put (和添加到队列)之前所做的任何更改都将在put中可见(从队列中获取后会发生)。