Возможное состояние гонки в синглтон-бине - PullRequest
1 голос
/ 11 мая 2019

Я сталкиваюсь с тем, что, по-видимому, является состоянием гонки в bean-компоненте Spring, который вызывается из сторонней библиотеки, и я пытаюсь определить, есть ли проблема с моей реализацией или, возможно, проблема связана с третьей стороной библиотека

@Override
public InputObject addMessageToInput(InputObject input) {

    List<String> messages = doStuff();

    log.debug("Messages are {}", messages);//messages appear to be correct at this point

    doLongRunningOpertation(); 

    log.debug("Messages are {}", messages);//messages appear to be correct at this point
    input.addMessages(messages);

    return input; //Return to third party library here
}

При возврате этой функции сторонняя библиотека обрабатывает вывод сообщений на внешний интерфейс. Проблема, которую я вижу, заключается в том, что сообщения, отображаемые на внешнем интерфейсе, иногда содержат больше или меньше сообщений, чем они должны. Следует также отметить, что программа НЕ является многопоточной.

Есть ли что-то, чего мне не хватает в моем коде, что может быть причиной этого состояния гонки?

1 Ответ

2 голосов
/ 11 мая 2019

Ну, может случиться много вещей, но я думаю, что ваш код выглядит довольно хорошо.

Что нужно учитывать ...

Передается ли список messages ввсе в методе doLongRunningOperation()?Если да, то помещается ли он в переменную класса в любой момент?

Является ли InputObject новым объектом каждый раз, когда он передается в ваш код?Если нет, то это может вызвать проблемы.

Является ли переменная InputObject messages пустой, когда она входит в ваш код?

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

Вы можете закомментировать длительный процесс, чтобы увидеть, продолжает ли проблема возникать.

Если вы видите, что проблема повторяется в вашей конкретной разработкеВ этой среде вы можете поместить точку останова отладки в метод InputObject.addMessages() и посмотреть, когда он вызывается.

Просто некоторые идеи, чтобы подумать и, возможно, попытаться помочь отладить проблему.

...