What operations in Java are considered atomic?

JavaMultithreadingAtomic

Java Problem Overview


What operations in Java are considered atomic?

Java Solutions


Solution 1 - Java

  • all assignments of primitive types except for long and double
  • all assignments of references
  • all assignments of volatile variables
  • all operations of java.concurrent.Atomic* classes

and maybe something more. Look at the jls.

As noted in the comments, atomicity does not imply visibility. So while another thread is guaranteed not to see a partially written int, it may never see the new value.

The operations on long and double are on common 64 bit CPUs atomic as well, although there's no guarantee. See also this feature request.

Solution 2 - Java

In Java, the reading and writing of 32-bit or smaller quantities are guaranteed to be atomic.
By atomic, we mean each action takes place in one step and cannot be interrupted. Thus, when we have multithreaded applications, the read and write operations are thread-safe and need not be made synchronized.

For example, the following code is thread safe:

public class ThreadSafe   
  {  
    private int x;  
    public void setX(int x)  
          {
           this.x = x;
           } 
  }

Solution 3 - Java

It would seem that assignments of longs are atomic, based on this method in AtomicLong.java:

public final void set(long newValue) {
    value = newValue;
}

Note the absence of any synchronization.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionrobinmagView Question on Stackoverflow
Solution 1 - JavamaaartinusView Answer on Stackoverflow
Solution 2 - JavaSaurabh GokhaleView Answer on Stackoverflow
Solution 3 - JavaLyle ZView Answer on Stackoverflow