[concurrency-interest] AtomicReferenceFieldUpdater vs Unsafe
Dr Heinz M. Kabutz
heinz at javaspecialists.eu
Wed Nov 16 16:37:04 EST 2011
In Java 6, classes like ConcurrentLinkedQueue and SynchronousQueue used
the AtomicReferenceFieldUpdater to update the next, head, etc. fields.
In Java 7, this was changed to instead use Unsafe.compareAndSwapObject()
The AtomicReferenceFieldUpdater does a bunch of error checking every
time it is called, like this:
if (obj == null || obj.getClass() != tclass || cclass != null ||
(update != null && vclass != null &&
vclass != update.getClass()))
return unsafe.compareAndSwapObject(obj, offset, expect, update);
My thinking is that the programmers changing ConcurrentLinkedQueue et al
probably wanted to improve the performance by not having to do all that
checking every time it is called. The Unsafe.compareAndSwapObject()
method is probably compiled to a single CPU instruction.
Is that correct?
Is there any other reason for this change?
Dr Heinz M. Kabutz (PhD CompSci)
Author of "The Java(tm) Specialists' Newsletter"
Sun Java Champion
IEEE Certified Software Development Professional
Tel: +30 69 72 850 460
More information about the Concurrency-interest