自定义锁中的同步队列与等待队列

在JAVA SE5之后,JAVA中增加了Lock接口用来实现自定义锁对象,但是当进行锁对象的自定义时,一般要在类内部内置一个内部类,而这个内部类需要实现队列同步器AbstractQueuedSynchronizer,并且重写其中的方法,当调用自定义锁的时候,其实是关联到了内部的队列同步器的方法中,从而实现了自定义对象的锁功能。今天和大家分享一些队列同步器内部维护的两个队列(同步队列以及等待队列)的一些学习知识,希望大家多多指教,鉴于博主能力有限,知识有限,对于其中的错误和不当,也希望大家不吝赐教。
首先先明确一点,这篇博客的所有叙述都是基于公平锁的实现来进行阐述,在文章后面会有一些对于非公平锁的分节,但是在此之前都是基于公平锁的,之所以强调这点,是因为对于公平锁而言,等待队列和同步队列都是一个FIFO队列,但是对于非公平锁来说,同步队列无法保证FIFO特性。
先来说明一下同步队列和等待队列的作用。其实从名字上我们知道,队列肯定是用来存储对象的,那这两个队列存储的又是什么对象呢,其实,这两个队列存储的是线程节点对象,那大家可能要问,既然凑是存储线程节点,那么为什么还要分成两个队列来进行存储呢,这就要从同步队列和等待队列的职责上说起了。
第一个我们先来说同步队列,首先我们知道,一个锁的获取是具有排他性的(当然例如读取锁这种共享锁不在讨论范围之内),那么当多个线程来竞争锁的时候,就需要对这些线程来进行排队,怎么来排队呢,当然就是采取队列的方式了。简而言之,同步队列存储的是竞争锁的线程节点,注意,这些竞争锁的线程是在同时活动的,每一个线

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值