Spring @Async и Synchronized - PullRequest
       7

Spring @Async и Synchronized

6 голосов
/ 28 октября 2011

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

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

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


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

1 Ответ

4 голосов
/ 31 декабря 2012

Нет, асинхронность не должна влиять на поведение атомного целого числа.

С учетом данной информации, единственным логическим выводом является то, что существует некоторое исключение, о котором не сообщается.

, еслиэто возможно для вас, попробуйте установить обработчик исключений Uncaught

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.UncaughtExceptionHandler.html

В обработчике убедитесь, что трасса напечатана как минимум.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...