• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java当中锁的公平性

Java 海叔叔 3小时前 2次浏览 已收录 0个评论

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

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

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

这样的话尝试获取非公平锁的每个线程都会有机会“抢”在“乖线程”之前获得锁,也就导致非公平锁性能上会比公平锁要高。


喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址