公平锁
公平锁对于线程来说是先请求先调度执行,即FIFO队列,队列头部第一个线程永远先执行,系统吞吐量较低.
例如Java中的ReentrantLock默认是非公平锁,可以通过参数改为公平锁,.
FairSync()实现类公平锁
非公平锁
非公平锁见名知意,并不是线程先请求就会先被执行,底层是采用某种机制可能是优先权抢占,短线程抢占,来抢锁,好处就是提高了系统的吞吐量,其中短线程抢占算法可能会导致长线程得不到执行产生"饥饿"现象,不过可以采用"老化技术"来解决饥饿问题.
例如Java中ReentrantLock默认就是非公平锁,还有synchronized也是非公平锁
总结
至于使用什么锁,是需要看使用场景,如果只需要性能吞吐量高并发,使用非公平锁即可,牺牲小我成就大我.