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