什么是并行java"actor"代码用线程代码替换标准同步

Jas*_*Jas 5 java concurrency scala actor akka

如果我有这个同步代码,我想用没有同步的actor替换,怎么样?

public synchronized int incrementAndGet() {
  i = i + 1;
  return i;
}
Run Code Online (Sandbox Code Playgroud)

我在网站上有一堆用户,我需要返回每个递增的数字...如何用没有同步的actor代码替换该代码,因此没有阻塞同步代码.我想这将无法在多核等上运行它(这不是演员的目的吗?).

Tom*_*icz 3

一个简单的 actor 包裹i其内部状态:

case object Inc

class IncrementingActor extends Actor {
    var i = 0

    protected def receive = {
        case Inc =>
            i += 1
            sender ! i
    }
}
Run Code Online (Sandbox Code Playgroud)

并阻止使用(您需要以某种方式获取incrementAndGet):

import akka.pattern.ask

def incrementAndGet() = 
  Await.result((incrementingActor ? Inc).mapTo[Int], 1 seconds)
Run Code Online (Sandbox Code Playgroud)

这段代码是:缓慢、复杂且不惯用。关于什么AtomicInteger