深入理解AQS独占锁之ReentrantLock源码分析 PDF 下载

ReentrantLock源码分析下载

  • 书籍大小:319KB
  • 书籍语言:简体中文
  • 书籍类型:国产软件
  • 书籍授权:免费软件
  • 更新时间:2014-01-25 23:40:33
  • 书籍类别:java电子书
  • 购买链接:
  • 网友评分:软件评分
  • 应用平台:PDF
319KB
360通过 腾讯通过 金山通过
内容介绍热点排行相关文章下载地址↓

主要内容:

1. 管程 — Java同步的设计思想

管程:指的是管理共享变量以及对共享变量的操作过程,让他们支持并发。

互斥:同一时刻只允许一个线程访问共享资源;

同步:线程之间如何通信、协作。

MESA模型

在管程的发展史上,先后出现过三种不同的管程模型,分别是Hasen模型、Hoare模型和MESA模

型。现在正在广泛使用的是MESA模型。

管程中引入了条件变量的概念,而且每个条件变量都对应有一个等待队列。条件变量和等待队列的

作用是解决线程之间的同步问题。

2. AQS原理分析

2.1 什么是AQS

java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队

列、独占获取、共享获取等,而这些行为的抽象就是基于AbstractQueuedSynchronizer(简称

AQS)实现的,AQS是一个抽象同步框架,可以用来实现一个依赖状态的同步器。

JDK中提供的大多数的同步器如Lock, Latch, Barrier等,都是基于AQS框架来实现的

一般是通过一个内部类Sync继承 AQS

将同步器所有调用都映射到Sync对应的方法

AQS具备的特性:

阻塞等待队列

共享/独占

公平/非公平

可重入

允许中断

2.2 AQS核心结构

AQS内部维护属性volatile int state

state表示资源的可用状态

State三种访问方式:

getState()

setState()

compareAndSetState()

定义了两种资源访问方式:

Exclusive-独占,只有一个线程能执行,如ReentrantLock

Share-共享,多个线程可以同时执行,如Semaphore/CountDownLatch

AQS实现时主要实现以下几种方法:

isHeldExclusively():该线程是否正在独占资源。只有用到condition才需要去实现它。

tryAcquire(int):独占方式。尝试获取资源,成功则返回true,失败则返回false。

tryRelease(int):独占方式。尝试释放资源,成功则返回true,失败则返回false。

tryAcquireShared(int):共享方式。尝试获取资源。负数表示失败;0表示成功,但没有剩余可用资源;正数表

示成功,且有剩余资源。

tryReleaseShared(int):共享方式。尝试释放资源,如果释放后允许唤醒后续等待结点返回true,否则返回

false。

2.3 AQS定义两种队列

同步等待队列: 主要用于维护获取锁失败时入队的线程。

条件等待队列: 调用await()的时候会释放锁,然后线程会加入到条件队列,调用signal()唤醒的时候会把条件队

列中的线程节点移动到同步队列中,等待再次获得锁。

AQS 定义了5个队列中节点状态:

1. 值为0,初始化状态,表示当前节点在sync队列中,等待着获取锁。

2. CANCELLED,值为1,表示当前的线程被取消;

3. SIGNAL,值为-1,表示当前节点的后继节点包含的线程需要运行,也就是unpark;

4. CONDITION,值为-2,表示当前节点在等待condition,也就是在condition队列中;

5. PROPAGATE,值为-3,表示当前场景下后续的acquireShared能够得以执行;

人气书籍
下载地址
相关文章
网友评论
下载声明

☉ 解压密码:www.jb51.net 就是本站主域名,希望大家看清楚,[ 分享码的获取方法 ]可以参考这篇文章
☉ 推荐使用 [ 迅雷 ] 下载,使用 [ WinRAR v5 ] 以上版本解压本站软件。
☉ 如果这个软件总是不能下载的请在评论中留言,我们会尽快修复,谢谢!
☉ 下载本站资源,如果服务器暂不能下载请过一段时间重试!或者多试试几个下载地址
☉ 如果遇到什么问题,请评论留言,我们定会解决问题,谢谢大家支持!
☉ 本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。
☉ 本站提供的深入理解AQS独占锁之ReentrantLock源码分析 PDF 下载资源来源互联网,版权归该下载资源的合法拥有者所有。