我们正在使用 Scala、Play 框架和 MongoDB(使用 ReactiveMongo 作为我们的驱动程序)构建一个 Web 应用程序。应用程序架构是非阻塞端到端的。
在我们代码的某些部分,我们需要访问一些非线程安全的库,例如 Scala 的解析器组合器、Scala 的反射等。我们目前将此类调用封装在synchronized
块中。我有两个问题:
synchronized
与未来代码一起使用时有什么需要注意的问题吗?- 从性能和可用性的角度来看,使用锁(例如
ReentrantLock
)比使用锁更好吗?synchronized