20210827
公平锁
当来了一个线程,他就到队列中等待,线程按照在队列中的顺序去获得锁
优点:不会有某个线程一直得不到锁
缺点:假如排在前面的线程要占用很长时间的锁,排在后面的线程就迟迟得不到锁(银行办业务,我办业务只要5分钟,我前面的人要搞1小时,造成我办5分钟业务,却要等1小时)
占着锁和占着CPU是两回事!一个线程sleep时他不占着CPU,但占着锁
非公平锁
当来了一个线程,他直接去尝试获取锁,发现锁被其它线程占着,才去队列中等待
助记
银行办业务:
公平锁是每个来办业务的人都主动抽号排队,就算因为下一个人行动迟缓,柜台空着,也没人抢着办业务;
非公平锁就是每个来办业务的人,一进门就看柜台是否空着,如果空着就抢下柜台,如果不空才抽号排队