java - Spring AOP 与多线程

标签 java multithreading spring aop

使用 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/

相关文章:

java - 如何将列表转换为可变参数参数java

Java 扩大转换

java - 在 debain 6.0.1 亚马逊 EC2 实例中安装 selenium webdriver

java - 在运行时之前未知的多个对象作为 Java 线程的锁

java - Spring 批处理 : How to configure remote chunking for multiple jobs running in a task executor

java - ImmutableList.of 正在工作但突然停止工作

performance - 在 Jmeter 中减速的最佳方法是什么?

java - 如果在多核处理器中运行,多线程应用程序将占用多少 CPU

java - 无法在 Spring Boot 中查看缓存指标(命中/未命中/大小)?

java - 无法计算表达式 'hasRole(USER)'