概念

偏心锁:是指多个线程依照申请锁的程序来获取锁。相似于排队买饭,先来后到,先来先服务,就是偏心的,也就是队列

非偏心锁:是指多个线程获取锁的程序,并不是依照申请锁的程序。有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程(也就是某个线程始终等不到锁)

创立

并发包中ReentrantLock的创立能够指定析构函数的boolean类型来失去偏心锁或者非偏心锁,默认是非偏心锁

Lock lock = new ReentrantLock(true);    /*    创立一个可重入锁。true示意偏心锁,false示意非偏心锁。默认是false。*/

区别

偏心锁:在并发环境中,每个线程在获取锁时会先查看此锁保护的期待队列,如果为空,或者是期待队列里的第一个。就占用锁,否则就会退出到期待队列中,当前依照FIFO的规定从队列中取到本人。

非偏心锁:非偏心锁比拟粗鲁,上来就间接尝试占有锁,如果尝试失败,就再采纳相似偏心锁的形式。

tips:

非偏心锁的长处在于吞吐量比偏心锁大,对于synchronized而言,也是一种非偏心锁。