并发编程艺术-5

作者: e86dab508bc1 | 来源:发表于2018-04-16 22:41 被阅读0次

本文主要介绍java 中并发包中与锁相关的和组件,以及使用方式和实现细节。

Lock 的出现 : Java SE 5之后出现的,提供了synchronized 没有的功能,比如说可中断的获取锁,超时获取锁等等,当出现需要获取锁的组合的时候,用synchronized 就没有那么容易实现了。

  1. 队列同步器

AbstractQueuedSynchronized 是用来构建锁和其他同步组件的基础框架:

Provides a framework for implementing blocking locks and related

  • synchronizers (semaphores, events, etc) that rely on

  • first-in-first-out (FIFO) wait queues. This class is designed to

  • be a useful basis for most kinds of synchronizers that rely on a

  • single atomic {@code int} value to represent state.

同步器是实现锁的关键,利用同步器实现锁的语义,锁是面向用户的,而同步器是面向锁的实现者的。同步器提供的模板方法基本分为3类,独占和共享式获取和释放同步状态和查询队列中的等待线程情况,自定义组件需要使用这些方法来实现自己的同步语义。

具体的实现原理可以参考AbstractQueueSynchronized 源码,后面将会有片文章专门来解读这个类。

独占式:

共享式和独占式的区别是,能不能在同一时刻有多个线程获取到同步状态。

几种常见的API.

(1) 一般的锁都是排它锁,还有一种是读写锁,读锁不排斥其他读线程,写只允许一个线程写。 对于一般场景下面,读是超过写的,所以性能上面也能提供并发量个吞吐量,Java 里面提供了ReentrantReadWriteLock.

(2) Locksupport 定义一组以park/unpark 开头的方法来对线程进行阻塞和释放

(3) Condition: 提供了monitor 一类的方法。Await/signal ,和 lock 配合之后就是替换了

Synchronized/wait/notify 的消息通知机制。

相关文章

网友评论

    本文标题:并发编程艺术-5

    本文链接:https://www.haomeiwen.com/subject/rueykftx.html