是弹簧异步传递对象线程安全到以前的更新
我们使用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
中可见(从队列中获取后会发生)。
- 保留字作为变量或方法名称
- dom4j SAXReader – 停止解析
- 为什么要捕获InterruptedException来调用Thread.currentThread.interrupt()?
- 如何使用RESTeasy从multipart / form-data请求获取text / xml为UTF-8?
- Java:将char 转换为CharSequence
- Java Scanner找不到行,然后Scanner关闭错误?
- 使用Java API的S3 / AWS的SSL问题:“证书中的主机名不匹配”
- 如何在kafka 0.9.0中使用multithreading消费者?
- 下限有界通配符未针对上限有效类型参数进行检查