哈哈,这个很复杂的说,要看源码,而且对并发要很熟悉。
看情况啦,具我了解是这样的,1、ReentrantLock是偏向锁还是轻量级锁
首先他是乐观锁,然后实现了偏向锁的功能。
如果线程已经获得锁,那么ReentrantLock有偏向锁的功能。2、偏向锁跟可重入性有什么区别?
都是锁的一种特性,或者功能加强。 
没什么大的关系,如果不可重入,那什么偏向锁就不可能存在了。
CAS实现的称为乐观锁。有了轻量锁,在考虑偏向的功能。
偏向锁是在没有多个线程竞争时的功能加强,字面理解就是偏向这个线程。二种锁使用的场景不同。
还有一点,偏向锁的一个缺点,或者一种开销。
如果又有一个线程争用锁,那要需释放偏向锁,这个过程会带来一些开销。
总体来说有偏向锁比没有的好多。
这方面并没有深入了解,主要是应用和偶尔写些东西,比如自己写个线程池玩玩。
像偏向锁、非阻塞队列的现实,这些都不是一时半会能理解的。
如果上面说的有错误,请见谅,最好自己参考下各种文献。

解决方案 »

  1.   

    1. 并发包中的ReentrantLock是偏向锁河轻量级锁码?
    是的。2. 偏向锁跟可重入性有什么区别,非偏向锁如何实现可重入?
    偏向锁和可重入性直接没啥关系。。
    当然要是锁不具备可重入性,那就无所谓偏向了。
    可重入性是指比如一个线程获得了对象A上的锁,如果它第二次请求A的锁必然可以获得(也就是说不会自己把自己锁住),可重入性是线程必须满足的,不然很多代码就会死锁了
    偏向锁是说如果线程请求一个自己已经获得的锁,它不会去再次执行lock和unlock,这样可以提升性能。
    如何实现可重入都是一样的,就是把锁的拥有者记下来,当申请锁的时候看一下锁是否已经被占有了,如果有人占着锁,看看是不是就是申请者自己。 
      

  2.   

       感觉ReentrantLock的偏向实现跟JDK6的默认实现不一样。JDK6就像你上面说的,如果另外一个线程竞争锁,则将偏向锁升级,有一种将偏向锁功能限制在无竞争场景的感觉。而ReentrantLock好像锁对于持有者来说不管在什么情况下,都是偏向的。