Método AtomicReferenceArray getAndAccumulate() en Java con ejemplos

El método getAndAccumulate() de una clase AtomicReferenceArray se usa para actualizar atómicamente el elemento en el índice i de AtomicReferenceArray con los resultados de aplicar la función de acumulación dada a los valores actuales y dados y devuelve el valor anterior. AccumulatorFunction no debe tener efectos secundarios, ya que se puede volver a aplicar cuando fallan los intentos de actualización debido a la contención entre subprocesos. La función se aplica con el valor actual en el índice i como primer argumento y la actualización dada como segundo argumento.

Sintaxis:

public final E getAndAccumulate(int i, E x,
     BinaryOperator<E> accumulatorFunction)

Parámetros: Este método acepta:

  • i que es un índice de AtomicReferenceArray para realizar la operación acepta,
  • x que es el valor actualizado y
  • accumulatorFunction que es una función sin efectos secundarios de dos argumentos.

Valor devuelto: este método devuelve el valor anterior .

Los siguientes programas ilustran el método getAndAccumulate():
Programa 1:

// Java program to demonstrate
// getAndAccumulate() method
  
import java.util.concurrent.atomic.*;
import java.util.function.BinaryOperator;
  
public class GFG {
    public static void main(String args[])
    {
        // an array
        Integer a[]
            = { 123, 1232, 1433, 134, 13415, 1343 };
  
        // AtomicReferenceArray with array
        AtomicReferenceArray<Integer> array
            = new AtomicReferenceArray<>(a);
  
        // Print AtomicReferenceArray
        System.out.println(
            "The AtomicReferenceArray before update: "
            + array);
  
        // Index and Value to apply getAndAccumulate
        int index = 2;
        int E = 3;
  
        // Declaring the accumulatorFunction
        // applying function
        BinaryOperator add
            = (u, v)
            -> Integer.parseInt(
                   u.toString())
                   * Integer
                         .parseInt(
                             v.toString());
  
        // apply getAndAccumulate()
        int value
            = array.getAndAccumulate(index, E, add);
  
        // print AtomicReferenceArray
        System.out.println(
            "previous value of index 2:"
            + value);
        System.out.println(
            "The AtomicReferenceArray after update: "
            + array);
    }
}
Producción:

Programa 2:

// Java program to demonstrate
// getAndAccumulate() method
  
import java.util.concurrent.atomic.*;
import java.util.function.BinaryOperator;
  
public class GFG {
    public static void main(String args[])
    {
        // an array
        String a[] = { "GFG", "JS" };
  
        // AtomicReferenceArray with array
        AtomicReferenceArray<String> array
            = new AtomicReferenceArray<>(a);
  
        // Print AtomicReferenceArray
        System.out.println(
            "The AtomicReferenceArray before update : "
            + array);
  
        // Index and Value to apply getAndAccumulate
        int index = 1;
        String E = " PYTHON";
  
        // Declaring the accumulatorFunction
        // applying function to add value as string
        BinaryOperator add
            = (u, v) -> u.toString() + " and " + v.toString();
  
        // apply getAndAccumulate()
        String value
            = array.getAndAccumulate(index, E, add);
  
        // print AtomicReferenceArray
        System.out.println(
            "previous value of index 1:"
            + value);
        System.out.println(
            "The AtomicReferenceArray after update: "
            + array);
    }
}
Producción:

Referencias: https://docs.oracle.com/javase/10/docs/api/java/util/concurrent/atomic/AtomicReferenceArray.html#getAndAccumulate(int, E, java.util.function.BinaryOperator)

Publicación traducida automáticamente

Artículo escrito por AmanSingh2210 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *