Давайте рассмотрим следующий упрощенный код:
@Service
public class Runner {
private Service service;
public void process(){
Thread threadA = new Thread("New Thread") {
public void run(){
service.process();
}};
Thread threadB = new Thread("New Thread") {
public void run(){
service.process();
}};
threadA.start();
threadB.start();
}
}
@Service
public class Service {
private ApiClient apiClient;
public void process(){
..do something..
ResponseObject response = apiClient.callSomething();
..do something..
}
}
ApiClient, Serivce и Runner - это синглтон-бины, созданные Spring и внедренные через конструкторы. Теперь предположим, что пока threadA выполняет свою работу, метод callSomething () получает небольшой тайм-аут, а threadB начинает выполнять свою работу. И threadA, и threadB ожидают возврата callSomething (), затем возвращается ответ от выполнения threadA. Возможно ли, что из-за этого тайм-аута, и threadA, и threadB будут go опережать ответ на запрос threadA?