【发布时间】:2013-07-24 05:50:46
【问题描述】:
我们正在使用 Scala、Play 框架和 MongoDB(使用 ReactiveMongo 作为我们的驱动程序)构建一个 Web 应用程序。应用程序架构是非阻塞端到端的。
在我们代码的某些部分,我们需要访问一些非线程安全的库,例如 Scala 的解析器组合器、Scala 的反射等。我们目前将此类调用封装在 synchronized 块中。我有两个问题:
- 将
synchronized与future-y 代码一起使用时有什么需要注意的地方吗? - 从性能和可用性的角度来看,使用锁(例如
ReentrantLock)比使用synchronized更好吗?
【问题讨论】:
-
我无法理解您所说的“未来代码”是什么意思
-
@fge,代码大量使用
Futures。我认为从上下文(Play、Reactive* 等)来看这已经足够清楚了,但似乎并非如此,所以很抱歉。 -
您不应使用默认执行上下文执行阻塞操作。 This answer 可能有用。
标签: java scala concurrency playframework-2.0 akka