【问题标题】:has AspectJ execution in thread-safe?AspectJ 在线程安全中执行吗?
【发布时间】:2016-07-07 10:49:35
【问题描述】:

知识问题 = 无代码、无错误、无示例报告。

我在ClassAmethod() 上应用了一个连接点,而ClassA 不是单例。我创建了处理这个连接点的MyAspect

问题:如果有 2 个调用者 ClassA.method(),并且调用者在 2 个不同的线程上工作(例如 web 请求),AspectJ 将在 2 个不同的线程上运行 MyAspect 还是在一个线程中运行?

我认为 AspectJ 在编织类的同一线程中执行 MyAspect(在本例中为 ClassA)。

【问题讨论】:

    标签: java multithreading aspectj aspect


    【解决方案1】:

    AspectJ 将在当前线程上执行你的切面。这意味着,如果您有一个多线程执行,那么您的方面也将在多个线程上运行。如果您的方面适用于共享状态,您需要确保以安全的方式访问您的共享状态。

    还要注意,除了默认的singleton,还有其他方面的实例化模型。对于单例切面,您的应用中只会创建一个切面实例。您可以使用perthis()pertarget()percflow()percflowbelow() 修饰符来更改您的方面将如何被实例化,并且AspectJ 将在每个对象上创建您方面的新实例> 或每个控制流。您或许可以使用这些实例化模型隔离方面状态,但如果您使用 shared 状态,则基本规则仍然适用:您需要注意对共享状态的线程安全访问。

    【讨论】:

    • 感谢您的回答和建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多