可能在Singleton Bean中的比赛状况



我正在遇到从第三方库中调用的弹簧豆中的种族条件,我正在尝试确定我的实现是否存在问题第三方图书馆可能存在问题

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

返回此功能后,第三方库将消息显示到前端的消息。我看到的问题是,前端显示的消息有时包含额外或更少的消息。我还应该注意,该程序不是多线程。

我的代码中是否缺少可能导致这种比赛状况?

好吧,可能会发生很多事情,但我认为您的代码看起来还不错。

要考虑...

messages列表在doLongRunningOperation()方法中是否完全通过?如果是这样,它是否在任何点上放置在类变量中?

每次将其传递到代码中时,InputObject是一个新对象吗?如果不是,那可能会引起问题。

InputObject messages变量是空的吗?

您可以考虑返回InputObject的新实例,而不是使用发送到您的方法的实例。

您可以评论长期运行的过程,以查看问题是否一直在发生。

如果您可以在特定的开发环境中重复该问题,则可以在InputObject.addMessages()方法中放置一个调试断点,然后查看何时被调用。

只是一些要考虑的想法,也许尝试帮助调试问题。

最新更新