[TOC] 上一篇分享了AQS的基本原理,在此基础上,再来看看ReentrantLock对AQS是怎么实现的,尤其是对可重入以及公平和非公平的理解 公平方式获取锁 先看看lock()方法: java / 对AQS中对应方法的重写,位于FairSync类中,锁公平获取实现方式 / protected ...
分类:
其他好文 时间:
2018-12-15 22:55:40
阅读次数:
196
Synchronized 存在明显的一个性能问题就是读与读之间互斥 ReadWriteLock 可以实现读与读不互斥,读与写互斥,写与写互斥 可重入 : 即允许一个线程多次获取同一个锁 连接:https://www.jianshu.com/p/9cd5212c8841 ...
分类:
其他好文 时间:
2018-12-14 17:17:33
阅读次数:
137
1 ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。还提供了可重入的加锁寓意。 内置锁中,死锁是一个严重的问题,主要原因是多个获取锁的顺序形成了一个环,恢复程序的唯一方法是重启程序,而防止死锁的唯一方法就是在构造程序时避免出现不一致 ...
分类:
其他好文 时间:
2018-12-11 16:04:44
阅读次数:
195
多线程的相关概念 1.进程:是操作系统结构的基础;是一个正在执行的程序;计算机中正在运行的程序实例;可以分配给处理器并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。 2.线程:线程是程序中一个单一的顺序控制流程。是程序执行流的最小单元。另外,线程是进 ...
分类:
编程语言 时间:
2018-12-09 22:06:26
阅读次数:
204
synchronized用于同步方法或者代码块,使得多个线程在试图并发执行同一个代码块的时候,串行地执行。以达到线程安全的目的。 在多线程的时候是这样的,但是对于单线程,是允许重入的,每重入一次,计数器加1,当退出代码块时,计数器减1。 那正常退出时计数器减1,抛异常时计数器也是减1。那如果两次重入 ...
分类:
其他好文 时间:
2018-12-06 22:19:17
阅读次数:
203
重入锁,指同一个线程试图获取一个已经由它自己持有的锁的一种“现象”。 譬如有一个类: 假设现在创建两个线程,ThreadA和ThreadB,同时调用TestDemo对象里面的方法, 当ThreadA率先获得testDemo对象锁,进入doSomething1()方法,ThreadB想要执行doSom ...
分类:
其他好文 时间:
2018-12-05 14:26:54
阅读次数:
137
ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁,同时也可 ...
分类:
其他好文 时间:
2018-11-29 15:27:32
阅读次数:
194
1.乐观锁--乐观锁是一种思想,它只解决对共享资源更新时的一致性问题,不解决读取共享资源过程中,其他线程修改了共享资源导致读取的是旧的资源的问题 一般范式为: 这种实现存在如下问题1):ABA问题 假如是链表结构,1线程操作期间,其他线程修改了A.next,1线程比较后自然以为是预期值,判断true ...
分类:
其他好文 时间:
2018-11-28 11:58:04
阅读次数:
623
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。 1、自旋锁 2、自旋 ...
分类:
编程语言 时间:
2018-11-27 19:18:56
阅读次数:
141
上次博客讲到了通过wait()方法和notify()方法来实现循环打印数字和字母得问题。其实使用重入锁也可以实现同样得功能,那么开始我们先通过源码来了解一下重入锁把。 首先它有一个lock()方法,它用来加锁,从代码中可以看到,它调用得是sync.lock()方法, 在这个类里面,有一个静态抽象类S ...
分类:
其他好文 时间:
2018-11-21 00:46:14
阅读次数:
182