有两种机制防止代码块受并发访问的干扰:1、一个是使用synchronized关键字。2、使用ReentrantLock类。(通过显示定义同步锁对象来实现同步。)同步锁(lock)方法是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程...
分类:
其他好文 时间:
2015-04-23 13:04:56
阅读次数:
133
有两种机制防止代码块受并发访问的干扰:1、一个是使用synchronized关键字。2、使用ReentrantLock类。(通过显示定义同步锁对象来实现同步。)同步锁(lock)方法是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程...
分类:
其他好文 时间:
2015-04-23 12:27:34
阅读次数:
147
Java并发基础框架AbstractQueuedSynchronizer初探 ReentrantLock的实现分析
分类:
编程语言 时间:
2015-04-22 00:10:07
阅读次数:
206
ConcurrentLinkedQueue是一个基于单链表的无界线程安全队列,该队列是FIFO的。ConcurrentLinkedQueue/ConcurrentLinkedDeue和LinkedBlockingQueue/LinkedBlockingDeue
相比,不同点在于它们不提供阻塞功能,并且是Lock-Free的,而后者则是利用ReentrantLock实现的。...
分类:
其他好文 时间:
2015-04-14 19:50:08
阅读次数:
312
今天上午,参加大摩的面试,自觉失败,记录一下过程。
面试官看着简历,并没有就简历提问,整个过程都在问java多线程的问题。
1. ReentrantLock,作为可重入锁,怎么理解“可重入”二字,有没有不可重复的锁?
我:获得对象锁的线程能够再次获得对象锁,访问对象……被鄙视了,后来想想,应该把递归这种场景说下;
2.生产者-消费者模型怎么实现?
我:使用synchronized或者Lo...
分类:
编程语言 时间:
2015-04-03 17:22:16
阅读次数:
246
摘要从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。场景1:如果发现该操作已经在执行中则不再执行(有状态执行)a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求操作时...
分类:
其他好文 时间:
2015-03-17 13:55:13
阅读次数:
154
ReentrantLock是一个较为常用的锁对象。在上次分析的uil开源项目中也多次被用到,下面谈谈其概念和基本使用。概念一个可重入的互斥锁定 Lock,它具有与使用 synchronized 相同的一些基本行为和语义,但功能更强大。名词解释:互斥表示同一时刻,多个线程中,只能有一个线程能获得该锁。...
分类:
数据库 时间:
2015-03-17 12:04:37
阅读次数:
194
深入理解java同步、锁机制我们主要讲解了关于synchronized的实现和各种锁的类型,本节将尝试从源码的角度去理解可重入锁ReentrantLock的实现。由于个人水平有限,文中出现错误的地方还请指出,避免误导更多人。
要理解ReentrantLock需要先理解所有锁的基础。AQS(AbstractQueuedSynchronizer)主要利用硬件原语指令(CAS compare-and-...
分类:
其他好文 时间:
2015-03-13 22:22:24
阅读次数:
184
AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类。 阅读Java的并发包源码你会发现这个类是整个java.util.concurrent的核心之一,也可以说是阅读整个并发包源码的一个突破口。比如读ReentrantLock...
分类:
编程语言 时间:
2015-03-10 21:21:01
阅读次数:
295
常用并发辅助类 CountDownLatch Semaphore CyclicBarrier, 都基于ReentrantLock实现。1 Semaphores are often used to restrict the number of threads than can* access s...
分类:
编程语言 时间:
2015-03-10 16:49:14
阅读次数:
160