Я использую Spring 4 и заметил странное поведение... если я несколько раз вызываю асинхронный метод из обычного метода экземпляра, то все они вызываются в разных потоках и заканчиваются в случайное время. Но если я несколько раз вызываю асинхронный метод из другого асинхронного метода, они заканчиваются по порядку. У меня есть что-то вроде этого:
@Async
public void nonAsyncMethod() {
for (int i = 0; i < 30; i++) {
asyncMethod();
}
}
@Async
public void asyncMethod() {
... something here
}
Я использую асинхронный исполнитель по умолчанию. Должен ли я использовать другой? Однако этот исполнитель не использует повторно ни один поток и каждый раз запускает новый, так что все должно быть в порядке... Может ли это быть просто совпадением? Но я пробовал более 10 раз, и если я вернусь к неасинхронному для первого метода, они закончатся случайным образом.