gpt4 book ai didi

java - 在未来的代码中使用同步/锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:15 28 4
gpt4 key购买 nike

我们正在使用 Scala、Play 框架和 MongoDB(以 ReactiveMongo 作为我们的驱动程序)构建一个网络应用程序。应用程序架构是端到端的非阻塞。

在我们代码的某些部分,我们需要访问一些非线程安全的库,例如 Scala 的解析器组合器、Scala 的反射等。我们目前将此类调用包含在 synchronized block 中。我有两个问题:

  1. synchronized 与 future-y 代码一起使用时,是否有任何需要注意的问题?
  2. 从性能和可用性的角度来看,使用锁(例如 ReentrantLock)是否比使用synchronized 更好?

最佳答案

这是一个老问题))看这里using-actors-instead-of-synchronized例如。简而言之,更明智的做法是使用 actor 而不是锁:

class GreetingActor extends Actor with ActorLogging {

def receive = {
case Greeting(who) ⇒ log.info("Hello " + who)
}
}

在任何给定时间只会处理一条消息,因此您可以放置​​任何您想要的非线程安全代码而不是 log.info,一切都会正常进行。顺便说一句,使用询问模式,您可以将您的参与者无缝集成到需要 future 的现有代码中。

关于java - 在未来的代码中使用同步/锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17826153/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com