Java并发编程的艺术-Java中的锁
2017-03-22 19:37
323 查看
Java中可以通过实现Lock接口的方式来创建自定义的同步部件,同步的部件核心其实就是同步队列(AbstractQueuedSynchronizer一般是通过一个内部类来实现它,然后实现他之中的几个方法);
可以这样理解锁与同步队列的关系:锁时面对使用者的,定义了使用者与锁之间的交互接口;而同步队列AQS是面向锁的,它简化了锁的实现方式,对用户来说,AQS屏蔽了同步管理,线程的排队,等待与唤醒等底层操作,锁和同步器很好的隔离了使用者和实现这所关注的领域。
在AQS中有一个volatile的state字段,用于描述锁的状态。AQS的核心就是主要通过getState()、setState(newState)、compareAndSetState(except,update)来操作state字段,以实现他自己的功能的。
AQS中可以被重写的方法
实现自定义同步组件时,将会调用同步器提供的模板方法。在模板方法中再去调用我们在同步器中重写的相关方法,所以说,同步组件不是直接去调用我们自定义的方法。
在同步器中提供的模板方法:
同步器提供的模板方法基本上分为3类:独占式获取与释放同步状态、共享式获取与释放 同步状态和查询同步队列中的等待线程情况 。自定义同步组件将使用同步器提供的模板方法来实现自己的同步语义。
综上可以总结出一个基本规律:
同步组件方法->AQS模板方法->AQS实现自定义方法(箭头代表调用)
同步器实现分析:
同步器依赖内部的同步队列(一个FIFO双向队列)来完成同步状态的管理,当前线程获取同步状态失败时,同步器会将当前线程以及等待状态等信息构造成为一个节点(Node)并将其加入同步队列,同时会阻塞当前线程,当同步状态释放时,会把首节点中的线程唤醒,使其再次尝试获取同步状态。同步队列中的节点(Node)用来保存获取同步状态失败的线程引用、等待状态以及前驱和后继节点,节点的属性类型与名称以及描述。
可以这样理解锁与同步队列的关系:锁时面对使用者的,定义了使用者与锁之间的交互接口;而同步队列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并发编程艺术 4 Java并发编程基础
- java并发编程的艺术【二】java并发机制的底层实现原理
- <java并发编程的艺术>读书笔记-第三章java内存模型(一)
- Java并发编程的艺术-第一章<并发编程的挑战>
- Java并发编程的艺术(九)——批量获取多条线程的执行结果
- Java并发编程艺术----读书笔记(二)
- java并发编程的艺术笔记第五章——java中的锁
- Java并发编程的艺术(一)——并发编程需要注意的问题
- Java并发编程的艺术(十一)——线程池(2)
- Java并发编程的艺术(二)——重排序
- Java并发编程的艺术(十)——线程池(1)
- Java并发编程艺术笔记之一二章
- Java并发编程的艺术(四)——线程的状态
- Java并发编程的艺术--笔记
- Java并发编程的艺术(十)——线程池(1)
- Java并发编程的艺术笔记
- java并发Fork/join框架-java并发编程的艺术