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