哈哈,这个很复杂的说,要看源码,而且对并发要很熟悉。
看情况啦,具我了解是这样的,1、ReentrantLock是偏向锁还是轻量级锁
首先他是乐观锁,然后实现了偏向锁的功能。
如果线程已经获得锁,那么ReentrantLock有偏向锁的功能。2、偏向锁跟可重入性有什么区别?
都是锁的一种特性,或者功能加强。
没什么大的关系,如果不可重入,那什么偏向锁就不可能存在了。
CAS实现的称为乐观锁。有了轻量锁,在考虑偏向的功能。
偏向锁是在没有多个线程竞争时的功能加强,字面理解就是偏向这个线程。二种锁使用的场景不同。
还有一点,偏向锁的一个缺点,或者一种开销。
如果又有一个线程争用锁,那要需释放偏向锁,这个过程会带来一些开销。
总体来说有偏向锁比没有的好多。
这方面并没有深入了解,主要是应用和偶尔写些东西,比如自己写个线程池玩玩。
像偏向锁、非阻塞队列的现实,这些都不是一时半会能理解的。
如果上面说的有错误,请见谅,最好自己参考下各种文献。
看情况啦,具我了解是这样的,1、ReentrantLock是偏向锁还是轻量级锁
首先他是乐观锁,然后实现了偏向锁的功能。
如果线程已经获得锁,那么ReentrantLock有偏向锁的功能。2、偏向锁跟可重入性有什么区别?
都是锁的一种特性,或者功能加强。
没什么大的关系,如果不可重入,那什么偏向锁就不可能存在了。
CAS实现的称为乐观锁。有了轻量锁,在考虑偏向的功能。
偏向锁是在没有多个线程竞争时的功能加强,字面理解就是偏向这个线程。二种锁使用的场景不同。
还有一点,偏向锁的一个缺点,或者一种开销。
如果又有一个线程争用锁,那要需释放偏向锁,这个过程会带来一些开销。
总体来说有偏向锁比没有的好多。
这方面并没有深入了解,主要是应用和偶尔写些东西,比如自己写个线程池玩玩。
像偏向锁、非阻塞队列的现实,这些都不是一时半会能理解的。
如果上面说的有错误,请见谅,最好自己参考下各种文献。
是的。2. 偏向锁跟可重入性有什么区别,非偏向锁如何实现可重入?
偏向锁和可重入性直接没啥关系。。
当然要是锁不具备可重入性,那就无所谓偏向了。
可重入性是指比如一个线程获得了对象A上的锁,如果它第二次请求A的锁必然可以获得(也就是说不会自己把自己锁住),可重入性是线程必须满足的,不然很多代码就会死锁了
偏向锁是说如果线程请求一个自己已经获得的锁,它不会去再次执行lock和unlock,这样可以提升性能。
如何实现可重入都是一样的,就是把锁的拥有者记下来,当申请锁的时候看一下锁是否已经被占有了,如果有人占着锁,看看是不是就是申请者自己。