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
在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java 5.0 增加了一种新的机制:ReentrantLock.它并不是一种替代内置加锁...
分类:
编程语言 时间:
2016-09-13 13:43:32
阅读次数:
251
摘要 Lock在硬件层面依赖CPU指令,完全由Java代码完成,底层利用LockSupport类和Unsafe类进行操作; 虽然锁有很多实现,但是都依赖AbstractQueuedSynchronizer类,我们用ReentrantLock进行讲解; ReentrantLock调用过程 Reentr ...
分类:
其他好文 时间:
2016-09-06 18:27:59
阅读次数:
301