转载自 http://www.cnblogs.com/skywang12345/p/java_threads_category.html
JUC:java.util.concurrent
一,JUC原子类
根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。
1. 基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;
2. 数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;
3. 引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;
4. 对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceFieldUpdater 。
这些类存在的目的是对相应的数据进行原子操作。所谓原子操作,是指操作过程不会被中断,保证数据操作是以原子方式进行的。
AtomicLong:
AtomicLong是作用是对长整形进行原子操作。
在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进行操作,所以不具有原子性。而使用AtomicLong能让long的操作保持原子型。
示例:
package com.util.concurrent.atomic; import java.util.concurrent.atomic.AtomicLong; public class AtomicLongTest { public static void main(String[] args) { // TODO Auto-generated method stub AtomicLong mAtoLong = new AtomicLong(); mAtoLong.set(0x0123456789ABCDEFL); System.out.println("toString()" + mAtoLong.toString()); System.out.println("get()" + mAtoLong.get()); System.out.println("intValue()" + mAtoLong.intValue()); System.out.println("longValue()" + mAtoLong.longValue()); System.out.println("incrementAndGet()" + mAtoLong.incrementAndGet()); System.out.println("getAndIncrement()" + mAtoLong.getAndIncrement()); System.out.println("decrementAndGet()" + mAtoLong.decrementAndGet()); System.out.println("getAndDecrement()" + mAtoLong.getAndDecrement()); System.out.println("get()" + mAtoLong.get()); System.out.println("addAndGet()" + mAtoLong.addAndGet(0x10)); System.out.println("getAndAdd()" + mAtoLong.getAndAdd(0x10)); System.out.println("getAndSet()" + mAtoLong.getAndSet(0x0123456789ABCDEEL)); System.out.println("compareAndSet()" + mAtoLong.compareAndSet(0x0123456789ABCDEEL, 0x0123456789ABCDEDL)); System.out.println("get()" + mAtoLong.get()); } }
结果:
toString()81985529216486895 get()81985529216486895 intValue()-1985229329 longValue()81985529216486895 incrementAndGet()81985529216486896 getAndIncrement()81985529216486896 decrementAndGet()81985529216486896 getAndDecrement()81985529216486896 get()81985529216486895 addAndGet()81985529216486911 getAndAdd()81985529216486911 getAndSet()81985529216486927 compareAndSet()true get()81985529216486893
时间: 2024-10-09 20:25:22