Java并发编程-ReentrantLock

代码示例:

Lock lock = new ReentrantLock();
lock.lock();
try {
  // update object state
} finally {
   lock.unlock();
}

相比synchronized的优势

1.具有更好的并发性能,激烈争用情况下更佳的性能

2.添加了类似锁投票、定时锁等候和可中断锁等候的一些特性

源码分析:

点击lock方法,进入代码(NonfairSync):

final void lock() {
            //假设原始值是0
            //那么获取锁之后,将值设为1
            //并设置私有线程
            if (compareAndSetState(0, 1))
                setExclusiveOwnerThread(Thread.currentThread());
            else
                //如果值不是期望值0,则说明被其它线程占用锁
                //加锁失败,再次尝试加锁,失败则加入等待队列,
                //等待队列中会一直尝试加锁
                //如果队列加锁不成功,那么进入中断
                acquire(1);
        }

compareAndSetState方法运用了CAS

比较并替换的原理,此处是原子操作

参考文章:http://blog.csdn.net/fw0124/article/details/6672522

posted @ 2015-06-01 17:54  风过无痕的博客  阅读(244)  评论(0编辑  收藏  举报