在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,因此我们以ReentrantLock作为讲解切入点。1.ReentrantLo..
分类:
其他好文 时间:
2016-10-21 17:11:57
阅读次数:
278
1.java.util.concurrent.locks包里面的主要接口Lock,Condition,ReadWriteLock,主要的类为ReentrantLock,ReentrantReadWriteLock,ReentrantReadWriteLock.ReadLock,ReentrantRe ...
分类:
编程语言 时间:
2016-10-17 14:31:21
阅读次数:
201
1.注:先不看阻塞与否,这ReentrantLock的使用方式就能说明这个类是线程安全类。 2.线程安全的类,BlockingQueue,ConcurrentLinkedQueue。这些都是线程安全的集合类 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提 ...
分类:
编程语言 时间:
2016-10-13 19:26:17
阅读次数:
184
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) if (lock.tryLock()) { //如果已经被lock,则立即返回false不会等待,达到忽略操作的效果 a、用在定时任务时,如果任务执 ...
分类:
其他好文 时间:
2016-10-08 13:59:23
阅读次数:
111
一、AQS简介AQS全称AbstractQueuedSynchronizer,是java并发包中的一个类,该类更像是一个框架,提供了一些模板方法供子类实现,从而实现了不同的同步器,如下图所示。ReentrantLock,ReentrantReadWriteLock,ThreadPoolExecutor这些常见类都使用了AQS。以下是AQS的成员变量:p..
分类:
其他好文 时间:
2016-09-27 11:54:38
阅读次数:
139
synchronized原语和ReentrantLock在一般情况下没有什么区别,但是在非常复杂的同步应用中,请考虑使用ReentrantLock,特别是遇到下面2种需求的时候。 1.某个线程在等待一个锁的控制权的这段时间需要中断 2.需要分开处理一些wait-notify,ReentrantLoc ...
分类:
移动开发 时间:
2016-09-22 10:12:08
阅读次数:
165
独占锁 -- 锁在一个时间点只能被一个线程锁占有。根据锁的获取机制,它又划分为“公平锁”和“非公平锁”。公平锁,是按照通过CLH等待线程按照先来先得的规则,公平的获取锁;而非公平锁,则当线程要获取锁时,它会无视CLH等待队列而直接获取锁。独占锁的典型实例子是ReentrantLock,此外,Reen... ...
分类:
编程语言 时间:
2016-09-21 22:47:48
阅读次数:
124
一、什么是sychronized sychronized是java中最基本同步互斥的手段,可以修饰代码块,方法,类. 在修饰代码块的时候需要一个reference对象作为锁的对象. 在修饰方法的时候默认是当前对象作为锁的对象. 在修饰类时候默认是当前类的Class对象作为锁的对象. synchron ...
分类:
其他好文 时间:
2016-09-18 10:12:04
阅读次数:
198