Потокобезопасность вызова клиента API - PullRequest
0 голосов
/ 19 апреля 2020

Давайте рассмотрим следующий упрощенный код:

@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?

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