自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 新地址

http://doraemon.tech

2017-03-03 22:03:35 291

原创 AQS(6):闭锁和信号量

CountDownLatch闭锁可以使一个或多个线程等待一组事件的发生,内部的计数器记录了事件的数量。两个主要的方法就是await和countDown。public void await() throws InterruptedException { sync.acquireSharedInterruptibly(1); } public void countDown() {

2016-04-05 11:40:10 815

原创 AQS(5):ReentrantLock

ReentrantLock在行为和语义上与synchronized类似,但是更具可扩展性。该锁是可重入的,并且有公平和非公平两种选项。在学习了AQS之后,理解ReentranLock就更容易了。我们知道,AQS已经提供了状态管理,阻塞,队列管理等功能。继承于它的同步工具类只需要实现诸如tryAcquire,tryRelease等基础方法就能实现锁的功能。

2016-04-04 11:53:28 244

原创 AQS(4):condition

AQS中提供了一个实现Condition接口的内部类ConditionObject,其内部也维护了一个队列,首尾分别为firstWaiter,lastWaiter。当然,condition中最重要的两类方法就是await和signal。首先,我们来看await方法,在接口注释中我们知道该方法会导致当前线程等待直到被唤醒或者被中断。与该condition关联的锁会被自动释放并阻塞当前线程。在这个方法返

2016-04-03 15:39:15 418

原创 AQS(3):release

release系列方法用于实现解锁一个或多个线程,该方法可用于实现unlock。该方法首先会调用tryRelease方法,这个方法需要子类实现,尝试设置状态值以反映独占模式下的release行为。如果返回true,则需要解锁后继节点。下面我们直接看图。该方法的核心就是当tryRelease成功后,解锁头结点的下一个为被取消的后继节点。 独占模式下就只有这样一个release方法。而在共享模式下,区

2016-04-03 15:38:23 340

原创 AQS(2):acquire

在上文讲到,AQS中需要支持阻塞与释放两类操作,那么最重要的自然是acquire和release了。对于acquire,内部会调用tryAcquire()方法,而tryAcquire是一个protected的方法,在本抽象类中并未给出实现。因此这篇文中主要会讨论除调用tryAcquire方法外还需要做哪些操作。具体的tryAcquire后面也会继续探究。我们先来说一下acquire方法的思路,首先t

2016-04-03 15:37:41 806

原创 AQS(1):引言

这几篇文章是关于AQS的源码分析,该部分适合初学者阅读,本文亦发表在http://www.jianshu.com/users/37875b167db9/latest_articles中。

2016-04-03 15:35:48 314

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除