我正在遇到从第三方库中调用的弹簧豆中的种族条件,我正在尝试确定我的实现是否存在问题第三方图书馆可能存在问题
@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()
方法中放置一个调试断点,然后查看何时被调用。
只是一些要考虑的想法,也许尝试帮助调试问题。