synchronized的功能扩展: 重入锁;ReentrantLock; 其实也就是lock对于synchronized的替代了,要注意的一个点就是你可以锁多个,但是你锁了几个,最后就要解锁几个这个问题; 使用lock.lock()加锁,使用lock.unlock()解锁; 提供中断处理; 使用中 ...
分类:
其他好文 时间:
2018-10-01 23:47:58
阅读次数:
325
1、自旋锁自旋锁可以使线程在没有取得锁的时候,不被挂起,而转去执行一个空循环,(即所谓的自旋,就是自己执行空循环),若在若干个空循环后,线程如果可以获得锁,则继续执行。若线程依然不能获得锁,才会被挂起。使用自旋锁后,线程被挂起的几率相对减少,线程执行的连贯性相对加强。因此,对于那些锁竞争不是很激烈, ...
分类:
其他好文 时间:
2018-09-29 23:59:55
阅读次数:
334
锁的分类大致如下:公平锁/非公平锁可重入锁/不可重入锁独享锁/共享锁乐观锁/悲观锁分段锁 1、公平锁/非公平锁公平锁就是严格按照线程启动的顺序来执行的,不允许其他线程插队执行的;而非公平锁是允许插队的。 默认情况下 ReentrantLock 和 synchronized 都是非公平锁。Reentr ...
分类:
编程语言 时间:
2018-09-26 22:09:08
阅读次数:
200
二、分布式锁应该具备哪些条件 在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件: 1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行; 2、高可用的获取锁与释放锁; 3、高性能的获取锁与释放锁; 4、具备可重入特性; 5、具备锁失效机制,防止死锁; 6、具备非 ...
分类:
其他好文 时间:
2018-09-25 17:59:19
阅读次数:
194
__Interrupt 作用:执行紧急中断事件 要点: 1. 无参数 2. 无返回值 3. 短而高效,由中断置位标志位或发出信号由应用层去处理其他工作 4. 不应该有重入和性能上的问题,用puts而不是printf。 正确示例: void interrupt int60() { puts("This ...
分类:
其他好文 时间:
2018-09-23 11:28:48
阅读次数:
206
方案1:数据库的唯一 原理:当想要获得锁时,就向表中插入一条记录,释放锁时就删除这条记录。唯一索引录只被插入一次,那么就可以用这个记录是否存在来判断是否存于锁定。 存在的问题 锁没有失效时间,解锁失败的话其他线程无法再获得锁。 只能是非阻塞锁,插入失败直接就报错了,无法重试。 不可重入,已经获得锁的 ...
分类:
其他好文 时间:
2018-09-22 00:57:21
阅读次数:
245
同一进程 重入锁 使用ReentrantLock获取锁的时候回判断当前线程是否为获取锁的线程,如果是则将同步的状态+1,释放锁的时候则将状态-1,只有将同步状态的次数置为0的时候才会是最终释放锁。 读写锁 使用ReentrantReadWriteLock,同时维护一对锁:读锁和写锁。当写线程访问时则 ...
分类:
编程语言 时间:
2018-09-18 22:42:05
阅读次数:
239
一个小例子帮助理解 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝。由于井水有限,大家只能依次打水。为了实现家家有水喝,户户有水用的目标,村长绞尽脑汁,最终想出了一个比较合理的方案。 首先,在水井边上安排一个看井人,负责维持秩序。 然后,打水时,以家庭为单位,哪个家庭任何 ...
分类:
编程语言 时间:
2018-09-15 20:55:25
阅读次数:
177
一、前言 今天在做一些高并发的简单测试时(主要测试悲观锁、乐观锁、重入机制等等的效率,加深对锁的理解),报了一个莫名其妙的空指针错误: 错误原因指向一个业务实现类,于是赶忙打开该类查看第62行代码: 观察到,第62行只是一个简单的判断语句: 该判断句所引对象来自61行代码: 思考后发现,如果是空指针 ...
分类:
其他好文 时间:
2018-09-09 12:00:53
阅读次数:
226
今天看到一篇博客:jdk1.8的HashMap和ConcurrentHashMap,我想起了前段时间面试的一个问题:ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是可重入锁? 我想从下面几个角度讨论这个问题: 下面是我对面试中的那个问题的一下看法: 为什么 ...
分类:
其他好文 时间:
2018-09-07 19:19:23
阅读次数:
354