Thread专题(12)中,显式锁的原理和应用有哪些?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2672个文字,预计阅读时间需要11分钟。
此文章被作者收录在系列文章《架构师必备》(系列)中。在Java 5.0之前,对象共享访问机制仅有synchronized和volatile。内部锁无法中断那些正在等待获取锁的线程,并且请求锁失败。
此文被笔者收录在系列文章 架构师必备(系列) 中
在java5.0之前,对象共享访问的机制只有synchronized和volatile。内部锁不能中断那些正在等待获取锁的线程,并且在请求锁失败的情况下,必须无限等待。在5.0之后提供了ReentrantLock,ReentrantLock并不是为了替代内部锁,提供可选择的高级特性,比如活跃度和性能。
一、Lock和ReentrantLock
Lock接口,定义了一些抽象的锁操作,与内部加锁机制不同,Lock提供了无条件的、可轮询的、定时的、可中断的锁操获取操作,所有锁的方法也是显式的。Lock的实现必须提供具有与内部加锁相同的内存可见性的语义。
Lock接口的规范形式,锁必须在finally块中释放。原因是如果锁守护的代码在try块之外抛出了异常,它将永远都不会被释放,如果对象能够被置于不一致的状态,可能需要额外的try-catch或try-finally块。而且显式锁并不会主动释放,如果忘记写fianlly块,则程序很难追踪的到。
本文共计2672个文字,预计阅读时间需要11分钟。
此文章被作者收录在系列文章《架构师必备》(系列)中。在Java 5.0之前,对象共享访问机制仅有synchronized和volatile。内部锁无法中断那些正在等待获取锁的线程,并且请求锁失败。
此文被笔者收录在系列文章 架构师必备(系列) 中
在java5.0之前,对象共享访问的机制只有synchronized和volatile。内部锁不能中断那些正在等待获取锁的线程,并且在请求锁失败的情况下,必须无限等待。在5.0之后提供了ReentrantLock,ReentrantLock并不是为了替代内部锁,提供可选择的高级特性,比如活跃度和性能。
一、Lock和ReentrantLock
Lock接口,定义了一些抽象的锁操作,与内部加锁机制不同,Lock提供了无条件的、可轮询的、定时的、可中断的锁操获取操作,所有锁的方法也是显式的。Lock的实现必须提供具有与内部加锁相同的内存可见性的语义。
Lock接口的规范形式,锁必须在finally块中释放。原因是如果锁守护的代码在try块之外抛出了异常,它将永远都不会被释放,如果对象能够被置于不一致的状态,可能需要额外的try-catch或try-finally块。而且显式锁并不会主动释放,如果忘记写fianlly块,则程序很难追踪的到。

