关于java当中锁的公平性

1960阅读 0评论2021-01-05 stolennnxb
分类:Java

之前在看java相关的东西的时候(包括上学的时候学习相关课程),突然发现这东西很好玩,决定研究下。java当中关于锁一般情况有两种吧,synchronized和显式的lock,如果不做特殊说明呢,都是非公平的。

关于线程之间的调度:当一个线程拥有一个锁的时候,其余的线程想要获取锁,就必须在该锁上等待,等待当前拥有这个锁的线程释放锁,然而,当拥有这个锁的线程释放之后,它会通知在该锁上等待的线程进行调度,不是说这个退出,另一个立马接上,在第一个持有锁的线程退出,到下一个线程获得锁的过程中,会有一个时间窗口window,而且接到锁可用通知的线程也不是直接执行,它也会先判断是否可以获得所,可以获得才会执行自己线程当中的代码。

公平锁:当有一个线程请求某个锁的时候,排队等待,做个乖孩子,走“人们认为他应该做的”那条路
非公平锁:当有一个线程请求某个锁的时候,如果当前处于上面的窗口期,直接获得所,不用排队,否则,排队。

这样的话尝试获取非公平锁的每个线程都会有机会“抢”在“乖线程”之前获得锁,也就导致非公平锁性能上会比公平锁要高。
上一篇:Makefile当中的.PHONY——伪目标
下一篇:字符串匹配之BM算法(Boyer-Moore)