AtomicLongArray getAndUpdate() method in Java with Examples

The Java.util.concurrent.atomic.AtomicLongArray.getAndUpdate() is an inbuilt method in Java that updates the value at any given index of the AtomicLongArray after applying a given update function on the value at that index. The method takes the index value of the AtomicLongArray and the update function as the parameters and updates the value at that index by applying the update function on that value. The function should be side-effect-free, since it may be re-applied when attempted updates fail due to contention among threads. The only difference between the getAndUpdate() and updateAndGet() function is that the former returns the value before the update and the latter returns the value after the update.

Syntax:

public final long getAndUpdate(int i, LongUnaryOperator updateFunction)




Parameters:
The function accepts two parameters:

  • i which is the index where update is to be made.
  • updateFunction which is the update function of single argument that tells what update is to be made.
  • Return value: The function returns a long value which is the value after applying the specified update function.

    Below programs illustrate the above method:
    Program 1:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program that demonstrates
    // the getAndUpdate() function
      
    import java.util.concurrent.atomic.AtomicLongArray;
    import java.util.function.LongUnaryOperator;
      
    public class GFG {
        public static void main(String args[])
        {
            // Initializing an array
            long a[] = { 1, 2, 3, 4, 5 };
      
            // Initializing an AtomicLongArray with array a
            AtomicLongArray arr = new AtomicLongArray(a);
      
            // Displaying the AtomicLongArray
            System.out.println("The array : " + arr);
      
            // Index where update is to be made
            int idx = 3;
      
            // Declaring the updateFunction
            LongUnaryOperator squaredFunction = (l) -> l * l;
      
            // Updating the value at idx
            // applying updateFunction and
            // storing the previous value
            long prev = arr.getAndUpdate(idx, squaredFunction);
      
            // Displaying the previous value
            System.out.println("The value before update"
                               + " at index " + idx
                               + " is " + prev);
      
            // Displaying the AtomicLongArray
            System.out.println("The array after update : "
                               + arr);
        }
    }

    chevron_right

    
    

    Output:

    The array : [1, 2, 3, 4, 5]
    The value before update at index 3 is 4
    The array after update : [1, 2, 3, 16, 5]
    

    Program 2:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program that demonstrates
    // the getAndUpdate() function
      
    import java.util.concurrent.atomic.AtomicLongArray;
    import java.util.function.LongUnaryOperator;
      
    public class GFG {
        public static void main(String args[])
        {
            // Initializing an array
            long a[] = { 1, 2, 3, 4, 5 };
      
            // Initializing an AtomicLongArray with array a
            AtomicLongArray arr = new AtomicLongArray(a);
      
            // Displaying the AtomicLongArray
            System.out.println("The array : " + arr);
      
            // Index where update is to be made
            int idx = 3;
      
            // Declaring the updateFunction
            LongUnaryOperator cubeFunction = (l) -> l * l * l;
      
            // Updating the value at idx
            // applying updateFunction and
            // storing the previous value
            long prev = arr.getAndUpdate(idx, cubeFunction);
      
            // Displaying the previous value
            System.out.println("The value before update"
                               + " at index " + idx
                               + " is " + prev);
      
            // Displaying the AtomicLongArray
            System.out.println("The array after update : "
                               + arr);
        }
    }

    chevron_right

    
    

    Output:

    The array : [1, 2, 3, 4, 5]
    The value before update at index 3 is 4
    The array after update : [1, 2, 3, 64, 5]
    

    Reference: https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLongArray.html#getAndUpdate-int-java.util.function.LongUnaryOperator-



    My Personal Notes arrow_drop_up

    Coder Machine Learner Social Activist Vocalist

    If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

    Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.