我注意到我的应用程序中有一些奇怪的行为,闻起来像缺乏线程安全性。我正在努力复制它,但与此同时,我想确保我对从线程角度如何使用包含我的端点处理程序的类做出正确的假设。发生的大部分事情对我来说是不透明的,因为我不是首先实例化该类的人。说明显而易见的,它必须是端点中的一些黑魔法。
我的假设
为我的应用程序中的每个请求创建一个包含我的端点处理程序的类的实例。基于这个假设,该类可以使用我的处理程序使用的非线程安全对象。
我的恐惧
端点处理程序类的实例在请求之间重用。
那么,这是什么?无论答案如何,我认为删除应用程序中的模糊性并假设最坏的情况对我来说是有意义的,因为我认为我无法控制端点的行为方式。在我的例子中,我在构造容纳我的端点处理程序的类时创建了一个JDO / DataNucleus PersistenceManager(不是线程安全的)。我应该只是在每个处理程序中创建它作为本地,或使用ThreadLocal。
我也可以通过测试来证明其中一个。如果我这样做的话,我会回复我自己的问题。