On 2/12/2014 4:51 PM, Alex Yursha wrote:
Thanks for all responses. All this is much clearer now.

Am I right that all this state packing is for better performance only and the 
same behaviour can be achieved by using explicit locks?

Sure.

David

On Dec 2, 2014, at 05:32, David Holmes <david.hol...@oracle.com> wrote:

On 2/12/2014 3:44 AM, Alex Yursha wrote:
1. Do you mean 'the only way', except using a lock?

2. I also cant imagine how we can use long primitive type for CAS atomicity 
without a lock if only its not an AtomicLong. Any hint here, please?

AtomicFieldUpdater can apply atomic operations to plain (volatile) int and long 
fields. The Unsafe API can also be used to do it more performantly.

David

Thanks


Sent from my iPhone

On Dec 1, 2014, at 20:27, Martin Buchholz <marti...@google.com> wrote:

The only way to use atomic compare and set is to pack all your state
into a single primitive unit.  The largest we have is "long".  So we
regularly pack what the C folks would call bitfields into longs.

On Sat, Nov 29, 2014 at 8:13 AM, Alex Yursha <alexyur...@gmail.com> wrote:
Hi all,

According to javadoc current implementation of ThreadPoolExecutor packs two 
conceptual fields ‘workerCount’ and ‘runState’ into one actual field ‘ctl’ of 
type AtomicInteger.

Could you please explain are there any performance or other benefits for this? 
It seems to complicate the class design and I can’t find the positive side of 
this.

Thanks,
Alex


Reply via email to