从零开始java多线程并发---锁(二):AQS以及实现类的介绍

一:AbstractOwnableSynchronizer介绍

  AbstractOwnableSynchronizer是整个JUC的核心,在jdk1.5引入,用来控制java并发编程核心底层抽象模板。其提供整套的创建线程所需要的权锁以及同步器的基础,简称AQS。准确的的说AQS是一套模板,本身不提供任何的实现所有的线程控制、诊断都是交由其子类或者工具类实现的。目前jdk对其已经的实现类分为AbstractQueuedLongSynchronizerAbstractQueuedLongSynchronizer

     首先我们来看1.8文档对于其的介绍,仅提供了3个构造方法:

 

二:AQS解决方案的核心

  AQS解决问题的核心就是:对于资源的访问状态的控制(资源是否共享、资源之间的竞争以及资源的访问队列等问题)。我们来看一下其实现的方法的同步器的资源的控制方式:

            

三:实现类AbstractQueuedLongSynchronizer支持的Api 

四:实现类 AbstractQueuedLongSynchronizer实现的APi

五:AQS共同实现了什么

  通过 2个API比较分析,我们来看看AQS模板到底实现了什么?

  • 确定了资源是以独占方式/共享方式方式获取(独享锁/共享锁)
  • 确定了是否中断
  • 内部使用了CAS操作
  • 返回当前运行线程、等待线程的API
  • 返回同步状态值
  • 确定了线程是否重入

六:AQS的基本原理

AQS是一个抽象的队列式同步器,其定义了整套的资源控制访问:

  • AQS维护了一个共享资源(state)和一个等待队列(FIFO,多线程资源竞争被阻赛会进入次队列)。  其中state定义3个方法:getState(),setState(),compareAndSetState() 
  • AQS定义了资源共享的方式:独占Exclusive(只允许一个线程用到),共享share(允许多线程用到),自定义同步器                 只要重写上面的setState()方法,这里方法里可以定义的方法(只要调用即可):

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值