Spring @Async and Synchronized

У меня есть асинхронный метод на основе Spring (с пометкой @Async ), который я хочу приостановить в случае возникновения ошибки определенного числа. раз. Поскольку может быть более одного потока, выполняющего одно и то же, я попробовал статический AtomicInteger ( MY_COUNT ), чтобы все потоки могли знать счетчик и использовать встроенного параллелизма AtomicInteger обеспечивает.

В моих модульных тестах (выполняемых с SpringJUnit4ClassRunner в Eclipse) все хорошо, пока поток не достигнет MY_COUNT.incrementAndGet () . Потом нить просто пропадает. Без исключения, ничего. Рабочий поток async просто исчезает. Я попытался извлечь AtomicInteger и просто использовать синхронизированные методы, но случилось то же самое.

Вопрос: есть ли какое-то внутреннее взаимодействие между @Async и синхронизацией? Разве невозможно объединить два?


РЕДАКТИРОВАТЬ: подробнее: похоже, что это имеет какое-то отношение к области синхронизации (если это правильный термин). После того, как я удалил статическое обозначение из переменной счетчика, он все равно провалился; но затем, когда я изменил его на Integer и переместил код приращения в его собственный синхронизированный метод, тогда код продолжился. Я не отлаживал базовый код Spring; есть ли какие-нибудь эксперты Spring, которые могли бы пролить свет на такое поведение?

6
задан atrain 31 October 2011 в 13:56
поделиться