使用 Spring AOP 进行异步线程处理安全吗?
让我用一个代码示例来更清楚地说明这一点:
@AfterReturning(pointcut = within(com..*)", returning = "result")
public void sampleWithNewThread(JoinPoint joinPoint, Object result) {
executorService.submit(() -> {
dbConnection.write(joinPoint.getSignature().getName());
dbConnection.write(result);
});
}
“接触”新线程中的 joinPoint 和 result 对象是否安全?这些是线程安全的吗?
我很确定它没问题,但我找不到它的证明引用。
最佳答案
JoinPoint
的 javadoc并且您可以从中检索的类型(例如Signature
)没有明确声明它们是线程安全的。然而,它们不提供任何方法来改变它们,即。它们只公开 getter 方法。
您可以认为这意味着它们是不可变的,但您不需要这样做。只需在调用 @AfterReturning
注解方法的线程中检索值,并将这些值传递给另一个线程即可。
@AfterReturning(pointcut = within(com..*)", returning = "result")
public void sampleWithNewThread(JoinPoint joinPoint, Object result) {
final String signatureName = joinPoint.getSignature().getName();
executorService.submit(() -> {
dbConnection.write(signatureName);
dbConnection.write(result);
});
}
关于java - Spring AOP 与多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32848241/