概念
偏心锁:是指多个线程依照申请锁的程序来获取锁。相似于排队买饭,先来后到,先来先服务,就是偏心的,也就是队列
非偏心锁:是指多个线程获取锁的程序,并不是依照申请锁的程序。有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程(也就是某个线程始终等不到锁)
创立
并发包中 ReentrantLock
的创立能够指定析构函数的 boolean 类型来失去偏心锁或者非偏心锁,默认是非偏心锁
Lock lock = new ReentrantLock(true);
/*
创立一个可重入锁。true 示意偏心锁,false 示意非偏心锁。默认是 false。*/
区别
偏心锁:在并发环境中,每个线程在获取锁时会先查看此锁保护的期待队列,如果为空,或者是期待队列里的第一个。就占用锁,否则就会退出到期待队列中,当前依照 FIFO 的规定从队列中取到本人。
非偏心锁:非偏心锁比拟粗鲁,上来就间接尝试占有锁,如果尝试失败,就再采纳相似偏心锁的形式。
tips:
非偏心锁的长处在于吞吐量比偏心锁大,对于 synchronized
而言,也是一种非偏心锁。