2016-07-07 7 views
1

Знание вопроса = нет кода, нет ошибок, нет примеров для отчетов.имеет исполнение AspectJ в потокобезопасном?

Я применил точку подключения по сравнению с method() от ClassA и ClassA не является ничем. Я создаю MyAspect, которые обрабатывают эту точку соединения.

Вопрос: если есть 2 вызывающих абонента ClassA.method(), а вызывающие работают на 2 разных потоках (например, веб-запросы), AspectJ будет запускать MyAspect поверх двух разных потоков или в одном?

думаю есть AspectJ исполнить MyAspect в этой же резьбе тканый класс (ClassA в этом случае).

ответ

2

AspectJ выполнит ваши аспекты в текущей теме. Это означает, что если вы выполняете многопоточное выполнение, ваш аспект будет работать и на нескольких потоках. Если ваш аспект работает с общим состоянием, вам необходимо убедиться в безопасном доступе к вашему совместному состоянию.

Также обратите внимание на то, что существуют другие модели создания экземпляров, кроме стандартных singleton. В одноэлементном аспекте в приложении будет создан только один экземпляр аспект. Вы можете использовать perthis(), pertarget(), percflow() или percflowbelow() модификаторы, какие изменения, как получит экземпляр ваш аспект, и AspectJ будет создан новый экземпляр вашего аспекта на каждого объекта или каждого потока управления основе. Вы могли бы выделить состояние состояния с помощью этих моделей создания экземпляров, но если вы используете общее состояние, основное правило по-прежнему применяется: вам нужно позаботиться о потокобезопасном доступе к общему состоянию.

+0

Спасибо за ответ и предложения. –