ReentrantLock默认使用非公平锁
public ReentrantLock() {
sync = new NonfairSync();
}
NonfairSync就是一个同步器
final static class NonfairSync extends Sync {
private static final long...
分类:
其他好文 时间:
2014-12-07 19:09:51
阅读次数:
255
【1】加特林机原理【2】左轮【3】原理【4】飞机螺旋桨与机枪同步器【5】内燃机:二冲程发动机【6】 四冲程发动机【7】水平对置式发动机【8】直列式发动机【9】V 型发动机【10】飞机的星形发动机【11】奎西发动机【12】 转子发动机【13】喷气发动机【14】双涵道涡轮风扇发动机【15】 外燃机:斯特...
分类:
其他好文 时间:
2014-12-02 18:45:36
阅读次数:
335
CountDownLatch闭锁也是基于AQS实现的一种同步器,它表示了“所有线程都等待,直到锁打开才继续执行”的含义。它和Semaphore的语意不同, Semaphore的获取和释放操作都会修改状态,都可能让自己或者其他线程立刻拿到锁。而闭锁的获取操作只判断状态是否为0,不修改状态本身,闭锁的释放操作会修改状态,每次递减1,直到状态为0。
所以正常情况下,闭锁的获取操作只是等待,不会立刻让自...
分类:
编程语言 时间:
2014-11-11 16:48:15
阅读次数:
216
前几篇分析了一下AQS的原理和实现,这篇拿Semaphore信号量做例子看看AQS实际是如何使用的。
Semaphore表示了一种可以同时有多个线程进入临界区的同步器,它维护了一个状态表示可用的票据,只有拿到了票据的线程尽可以进入临界区,否则就等待,直到获得释放出的票据。Semaphore常用在资源池中来管理资源。当状态只有1个0两个值时,它退化成了一个互斥的同步器,类似锁。
...
分类:
编程语言 时间:
2014-11-11 14:31:26
阅读次数:
216
AQS的设计思想是通过继承的方式提供一个模板让大家可以很容易根据不同场景实现一个富有个性化的同步器。同步器的核心是要管理一个共享状态,通过对状态的控制即可以实现不同的锁机制。AQS的设计必须考虑把复杂重复且容易出错的队列管理工作统一抽象出来管理,并且要统一控制好流程,而暴露给子类调用的方法主要就是操作共享状态的方法,以此提供对状态的原子性操作。一般子类的同步器中使用AQS提供的getState、s...
分类:
编程语言 时间:
2014-10-13 22:48:57
阅读次数:
249
无锁算法CAS概述 JDK5.0以后的版本都引入了高级并发特性,大多数的特性在java.util.concurrent包中,是专门用于多线并发编程的,充分利用了现代多处理器和多核心系统的功能以编写大规模并发应用程序。主要包含原子量、并发集合、同步器、可重入锁,并对线程池的构造提供了强力的支持。 .....
分类:
其他好文 时间:
2014-09-11 16:43:12
阅读次数:
256
为什么出这个真理文档呢?方面以后我们的视频不断跟进,高级部分关于JDK源码的学习,所以有些基本的思维要叙述一下,包括AQS,常用数据结构,线程等等。这一个帖子主要是我以前写的模拟常用数据结构的代码,可能有些bug 并且不规范,但是重在学习思维.并没有JDK源码部分考虑多,只是简单的写了一点.分享给大家,关于线程同步器的学习我觉得先会用 然后看源码,接着模拟.好开始数据结构了.
注意:在java...
分类:
其他好文 时间:
2014-08-17 13:07:42
阅读次数:
293
1、高级同步机制 使用synchronized关键词的问题在于加锁范围是固定的,无法把锁在对象之间进行传递,使用起来不灵活,但是也不容易出错。 (1)tryLock (2)ReadWriteLock (3)ReentrantLock 2、底层同步器 3、...
分类:
编程语言 时间:
2014-08-05 09:44:59
阅读次数:
246
1. AQS简介
AQS是Java并发类库的基础,其提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架。该同步器(以下简称同步器)利用了一个int来表示状态,期望它能够成为实现大部分同步需求的基础。使用的方法是继承,子类通过继承同步器并需要实现它的方法来管理其状态,管理的方式就是通过类似acquire和release的方式来操纵状态。然而多线程环境中对状态的操纵...
分类:
编程语言 时间:
2014-08-04 14:22:37
阅读次数:
295
在JDK1.5版本,新增了并发包,其中包含了显示锁、并发容器。在这些锁和容器里,都有同步器(AQS)的身影。在AQS中,有三个组件:1、原子管理同步状态;2、阻塞线程或恢复线程;3、维护队列,其中包括同步队列及条件队列。为了更好地理解JDK的并发包,我会用三个主题来详细描述AbstractQueuedSynchronizer的实现。...
分类:
其他好文 时间:
2014-07-29 14:34:48
阅读次数:
210