一、单机模式 在这种情况下,如果我们实现锁可以使用synchronized或ReentrantLock,但是在分布式情况下,它们最多只能锁住当前JVM的线程,对于其它server的线程无能为力。那么怎么处理呢? 二、分布式锁 1、基于数据库表做乐观锁 一般是通过为数据库表添加一个 “version ...
分类:
其他好文 时间:
2018-05-01 20:52:14
阅读次数:
277
ReentrantLock简介 ReentrantLock是一个可重复的互斥锁,又被称为独占锁,可重入的意思是:ReentrantLock锁可以被单个线程多次获取。但是在同一个时间点只能被一个线程锁持有 ReentrantLock使用一个FIFO(先进先出)的等待队里来管理获取该锁所有线程的。 Re ...
分类:
编程语言 时间:
2018-04-27 12:16:58
阅读次数:
144
出处:http://gearever.iteye.com 源码面前,了无秘密 侯捷 在tomcat架构分析(valve机制)(http://gearever.iteye.com/blog/1536022)里已经对valve的机制做了分析。现在通过源码来加深下理解。侯捷说过,源码面前,了无秘密。通过这 ...
分类:
其他好文 时间:
2018-04-24 23:21:33
阅读次数:
266
相同:ReentrantLock提供了synchronized类似的功能和内存语义。 不同: 1.ReentrantLock功能性方面更全面,比如时间锁等候,可中断锁等候,锁投票等,因此更有扩展性。在多个条件变量和高度竞争锁的地方,用ReentrantLock更合适,ReentrantLock还提供 ...
分类:
其他好文 时间:
2018-04-19 10:33:56
阅读次数:
157
本例子仅仅是博主学习阻塞队列和后的一些小实践,并不是真正的应用场景! 生产者消费者场景是我们应用中最常见的场景,我们可以通过ReentrantLock的Condition和对线程进行wait,notify同通信来实现生产者和消费者场景,前者可以实现多生产者和多消费者模式,后者仅可以实现一生产者,一消 ...
分类:
编程语言 时间:
2018-04-18 21:54:14
阅读次数:
222
重入锁ReentrantLock 可以代替synchronized, 但synchronized更灵活. 但是, 必须必须必须要手动释放锁. 重入锁 是指任意线程在获取到锁之后能够再次获取该锁而不会被阻塞. 对于ReentrantLock而言, 释放锁时, 锁定调用了n次lock()方法, 那么释放 ...
分类:
编程语言 时间:
2018-04-18 15:14:34
阅读次数:
257
1、可重入锁: 也称为递归锁,当外层函数获得该锁之后,内层递归函数仍有获取该锁的代码,结果不受影响; java中的synchronized ReentrantLock都是可重的 举例: 2、自旋锁 一个线程直接循环执行一个任务,不触发临界条件,另一个线程控制临界条件,另一个线程执行时可以使前一个线程 ...
分类:
编程语言 时间:
2018-04-17 00:03:20
阅读次数:
224
我们说的AQS就是AbstractQueuedSynchronizer,他在java.util.concurrent.locks包下,这个类是Java并发的一个核心类。第一次知道有这个类是在看可重入锁ReentrantLock中,在ReentrantLock中有一个内部类Sync继承于Abstrac ...
分类:
编程语言 时间:
2018-04-13 19:06:16
阅读次数:
224
ReentrantLock在进行实例化时,可以通过构造函数的参数选择是否使用公平锁FairSync或者非公平锁NonfairSync,两者的区别比较简单,如果是公平锁则新来的线程会先检测同步队列中是否有等待的线程,如果有,则追加到同步队列尾,锁竞争过程强调的是有序进行,当然代价比较明显,线程切换会造 ...
分类:
其他好文 时间:
2018-04-13 17:49:24
阅读次数:
202
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。 场景1:如果已加锁,则不再重复加锁 a、忽略重复加锁。b、用在界面交互时点击执行较长时间请求操作时,防止多次点击导致后台重复执行(忽略重复触发)。 以上两种情况多用于进行非重要任务防止重复执行,(如:清除无用 ...
分类:
其他好文 时间:
2018-04-09 13:13:36
阅读次数:
163