最近,比较郁闷的是公司一年一度的加薪没有恩泽到我,有了重新换公司的想法,所以多准备一下技术储备,翻起了《Java并发编程的艺术》,看到了Lock的实现基础类,队列同步器即AbstractQueuedSynchronizer,可以理解这个类是学习concurrent包下的多线程类的基础吧。
队列同步器是用到了设计模式:模板模式。所以使用这个类需要继承它,重写一下他的抽象方法来改变同步状态,getStatus获取同步状态,setStatus,compareAndSetState改变同步状态,因为这些是线程安全操作的。
那么这个类的作用是什么呢?它供很多的同步组件使用,同步组件比如有ReentrantLock、ReentrantReadWriteLock和CountDownLatch,同步器作为一个内部类,在同步组件中可以独占式或者共享式获取同步状态或者修改。这里得解释下独占式锁:独占锁就是在同一时刻只能有一个线程获取到锁,而其他获取锁的线程只能处于同步队列中等待,只有获取锁的线程释放了锁,后继的线程才能够获取锁。
下面通过代码来加深一下队列同步器AbstractQueuedSynchronizer在同步组件作用的理解
//模仿ReentrantLock 实现一个锁
看完代码,就理解这个队列同步器的作用了,至于同步器的实现,在Java并发编程的艺术这本书都有,内容比较多,有兴趣去读读看。