关于java:8Java锁之公平锁和非公平锁

2次阅读

共计 469 个字符,预计需要花费 2 分钟才能阅读完成。

概念

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

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

创立

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

Lock lock = new ReentrantLock(true);    

/*
    创立一个可重入锁。true 示意偏心锁,false 示意非偏心锁。默认是 false。*/

区别

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

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

tips:

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

正文完
 0