java.util.concurrent.atomic.AtomicLong是怎么实现同步的,我搜索了下该类,貌似没有synchronized关键字
大家一起来讨论讨论吧简单介绍:利用像AtomicLong这样已有的线程安全对象管理类的状态是非常实用的。相比于
非线程安全对象,判断一个线程安全对象的可能状态和状态的转换要容易得多。这简化了维护和验证
线程安全性的工作。
这些类用来实现数字和对象引用的原子状态转换。把long类型的计数器替换为AtomicLong类型的,我们可以
确保所有访问计数器状态的操作都是原子的。

解决方案 »

  1.   

     答:使用java.util.concurrent包中支持多线程的数据结构类(如:ConcurrentHashMap等),对写多线程JAVA
    程序带来很多方便.其中:java.util.concurrent.atomic包是提供原子操作的基本类.如:AtomicLong类.为了提高
    性能,AtomicLong等类在实现同步时,没有用synchronized关键字,而是直接使用了最低层(本地c语言实现代码)来完成的,
    因而你是看不到用synchronized关键字的.
    比如:AtomicLong类中原子操作方法:
    public final boolean compareAndSet(long expect, long update) ;
    就是直接使用SUN公司低层本地代码的原子方法(native方法):
    public final native boolean compareAndSwapLong(...)
    来实现的.
      

  2.   

    既然是这样,那看不到java源代码也无所谓
    我网上查到他是用非锁定,非阻塞的方式实现的,不知道有没有c语言实现的代码
    非常想看看代码的实现
      

  3.   

    既然是这样,那看不到java源代码也无所谓
    我网上查到他是用非锁定,非阻塞的方式实现的,不知道有没有c语言实现的代码
    非常想看看代码的实现
      

  4.   

    对于常规编程原子类很少会派上用场,但是在涉及性能调优时,他们就大有用武之地。
    即使使用了他们也需要确保不存在其他可能存在的问题。通常依赖锁要更安全些
    (synchronized,显示lock对象)
      

  5.   

    直接使用 CPU 指令——比较并交换(compare-and-swap, CAS)http://en.wikipedia.org/wiki/Compare_and_swap
      

  6.   

    那我有个疑问了,如果在多核CPU或多个CPU中的系统中,两个线程同时在两个CPU上运行,对AtmoicLong进行修改
    会不会出现我们不期望的结果?