在线程安全中执行AspectJ吗?

时间:2016-07-07 10:49:35

标签: java multithreading aspectj aspect

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

我在method()的{​​{1}}上应用了一个联接点,ClassA不是一个单身人士。我创建了ClassA来处理这个连接点。

问题:如果有MyAspect的2个呼叫者,并且呼叫者在2个不同的线程(例如Web请求)上工作,则AspectJ将在2个不同的线程或单个线程上运行ClassA.method()?< / p>

我认为AspectJ在编织类的同一个线程中执行MyAspect(在这种情况下为MyAspect)。

1 个答案:

答案 0 :(得分:2)

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

另请注意,除了默认的 singleton 之外,还有其他方面的实例化模型。使用单例方面,您的应用程序中只会创建一个方面实例。您可以使用perthis()pertarget()percflow()percflowbelow()修饰符更改您的方面将如何实例化,AspectJ将在<上创建方面的新实例em> per-object 或 per-control-flow 基础。您可能能够使用这些实例化模型隔离方面状态,但如果您使用共享状态,则基本规则仍然适用:您需要注意对共享状态的线程安全访问。