Весна @Async та синхронізація

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

У моїх тестових підрозділах (запустіть з SpringJUnit4ClassRunner в Eclipse), все добре, поки нитка не потрапить MY_COUNT.incrementAndGet() . Тоді нитка просто зникає. Ніякого винятку немає. Поточна робоча робота Async просто зникає. Я намагався вивести AtomicInteger і просто використовувати методи synchronized , але те ж саме відбувається.

Питання: чи існує якась взаємозалежність між @Async та синхронізацією? Чи неможливо поєднати ці два?


EDIT: більше інформації: здається, що це пов'язано з обсягом синхронізації (якщо це правильний термін). Як тільки я вилучив позначення static з лічильника змінної, він все ще бомбардував; але тоді, коли я змінив його на Integer і перемістив код збільшення до власного синхронізованого методу, то код продовжується. Я не налагодив основний код джерела; Чи є експерти Весни, які могли б прояснити цю поведінку?

6
@AaronSheffey: Може бути, ви можете надати фрагмент коду для критичних частин? Модем static підходить для лічильної змінної, інакше кожен потік має власний монітор. Також цікаво дивитися на stackstrace в точці, коли виконання в методі, анотований за допомогою @Async .
додано Автор dma_k, джерело
Швидше за все, це вилучення - це не повідомляється на консолі, можливо, через вашу реєстраційну конфігурацію. Чи можете ви спробувати спробувати зловити блок навколо проблемного коду
додано Автор gkamal, джерело

1 Відповіді

Ні, асинхрон не повинен впливати на поведінку атомного цілого.

З даною інформацією єдиний логічний висновок полягає в тому, що є якесь виняток, про яке не повідомляється.

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

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

У обробнику переконайтеся, що ви отримали відбиток у принаймні.

Якщо це не дасть вам рішення, або у вас виникли проблеми з налаштуванням невикористаного обробника виключень, надішліть свій код, щоб ми могли вам допомогти.

4
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників