2

AtomicInteger クラスのいくつかのメソッドの要点を理解するのを手伝ってくれませんか: updateAndGet, accumulateAndGet.

なぜ最初のものIntUnaryOperatorはパラメータとして受け取るのですか? このインターフェースの関数メソッドに適用できる可能性のあるロジックは何ですか? int私の考えでは、単純な価値だけを受け取りやすいでしょう。IntBinaryOperator(インターフェースと同じ)。

前もって感謝します。

4

1 に答える 1

7

に格納されている値をアトミックに 2 倍にしたい場合、AtomicIntegerJava 8 が作成される前に実行できた最善の方法は

while (true) {
  int x = ai.get();
  if (ai.compareAndSet(x, 2 * x)) {
    return 2 * x;
  }
}

...しかし、Java 8ではたとえば書くことができます

ai.updateAndGet(x -> 2 * x);

...そして、たとえば、アトミックにをaccumulateAndGet掛けることができaiますy

ai.accumulateAndGet(y, (x, y) -> x * y);

...これも実装できupdateAndGetますが、すでに 2 つの引数の操作がある場合は、より簡単に使用できる場合があります。

于 2015-11-30T18:11:26.457 に答える