Java并发编程的艺术-Java中的锁
来源:互联网 发布:阿里云域名无需备案 编辑:程序博客网 时间:2024/06/08 11:05
Java中可以通过实现Lock接口的方式来创建自定义的同步部件,同步的部件核心其实就是同步队列(AbstractQueuedSynchronizer一般是通过一个内部类来实现它,然后实现他之中的几个方法);
可以这样理解锁与同步队列的关系:锁时面对使用者的,定义了使用者与锁之间的交互接口;而同步队列AQS是面向锁的,它简化了锁的实现方式,对用户来说,AQS屏蔽了同步管理,线程的排队,等待与唤醒等底层操作,锁和同步器很好的隔离了使用者和实现这所关注的领域。
在AQS中有一个volatile的state字段,用于描述锁的状态。AQS的核心就是主要通过getState()、setState(newState)、compareAndSetState(except,update)来操作state字段,以实现他自己的功能的。
AQS中可以被重写的方法
实现自定义同步组件时,将会调用同步器提供的模板方法。在模板方法中再去调用我们在同步器中重写的相关方法,所以说,同步组件不是直接去调用我们自定义的方法。
在同步器中提供的模板方法:
同步器提供的模板方法基本上分为3类:独占式获取与释放同步状态、共享式获取与释放 同步状态和查询同步队列中的等待线程情况 。自定义同步组件将使用同步器提供的模板方法来实现自己的同步语义。
综上可以总结出一个基本规律:
同步组件方法->AQS模板方法->AQS实现自定义方法(箭头代表调用)
同步器实现分析:
同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。同步队列中的节点(Node)用来保存获取同步状态失败的线程引用、等待状态以及前驱和后继节点,节点的属性类型与名称以及描述。
- Java并发编程的艺术-Java中的锁
- Java并发编程的艺术
- Java并发编程的艺术
- Java并发编程艺术 5 Java中的锁
- Java并发编程艺术 8 Java中的并发工具类
- 《Java并发编程的艺术》笔记一——并发编程中的概念.md
- Java并发编程的艺术(上)
- Java并发编程的艺术 读笔
- Java并发编程的艺术--笔记
- 《java并发编程的艺术》读书笔记
- Java并发编程的艺术笔记
- java 并发编程的艺术 -- 总结
- Java并发编程的艺术-读书笔记
- Java并发编程的艺术-笔记1
- Java并发编程的艺术-笔记2
- java并发编程的艺术-读书笔记-01
- Java并发编程的艺术-第一章<并发编程的挑战>
- java并发编程的艺术【一】并发编程的挑战
- quartz教程-基础篇
- sea.js的初次尝试
- 移位运算
- css
- 剑指Offer 14 *调整数组顺序使奇数位于偶数前面
- Java并发编程的艺术-Java中的锁
- iOS透明导航栏的平滑过渡(进阶版)
- 光流法简单介绍
- 突发|百度首席科学家吴恩达巡捕离职百度
- 【简单】数字翻转
- 新手向--C++学习手札
- 二叉树——前中构造
- 项目在迭代过程中 清理 没有关联的资源 android studio 应用 清理资源 lint
- 生成随机数