![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
hzau_itdog
努力,奋斗!
展开
-
ReentrantReadWriteLock源码解析
什么是读写锁读写锁是一对(ReentrantReadWriteLock下的writeLock和readLock), 写锁是独占锁,读锁是公共锁,读读共存,只要有写就互斥。是否互斥读写读否是写是是类的继承体系ReentrantReadWriteLock中的三个主要内部类:(1)ReentrantReadWriteLock本身实现了ReadWriteLock接口,这个接口只提供了两个方法readLock()和writeLock();(2)同步器,包含一个继承原创 2020-07-13 16:53:49 · 151 阅读 · 0 评论 -
ReentrantLock源码解析
ReentrantLock继承体系Lock接口中主要定义了 获取锁、尝试获取锁、释放锁、条件锁等几个方法。构造方法//非公平锁public ReentrantLock() { sync = new NonfairSync();}//true公平锁,false非公平锁public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}主要内部类abstract s原创 2020-06-11 18:00:50 · 181 阅读 · 0 评论 -
各种锁的名词解释
1、公平锁/非公平锁公平锁,是按申请锁的先后顺序依次获取锁。非公平的锁,不是按照线程申请的顺序获取锁,可能发生后申请线程比先申请的线程先获得锁。ReentrantLock中可以通过构造方法指定是否为公平锁,默认为非公平锁,非公平锁的优点在于吞吐量大。synchronized一直都是非公平锁。2、可重入锁可重入锁,是指一个线程获取锁之后再尝试获取锁时会自动获取锁。ReentrantLock和synchronized都是可重入锁。3、独享锁/共享锁独享锁,也叫互斥锁,是指锁一次只能被一个线程持原创 2020-06-11 15:59:52 · 881 阅读 · 0 评论 -
AQS源码解析
简介 AQS的全称是AbstractQueuedSynchronizer,又叫队列同步器,是用来构建锁或者其他同步组件的基础框架。AQS使用int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取,线程排队的工作。继承体系其父类AbstractOwnableSynchronizer重要的源码如下private transient Thread exclusiveOwnerThread;protected final void setExclusiveOwnerThread(Threa原创 2020-06-10 15:54:08 · 125 阅读 · 0 评论 -
volatile原理以及使用场景
volatile的特性volatile是一个特殊的修饰符,只有成员变量才能使用它。 当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。volatile特性一:内存可见性,即线程A对volatile变量的修改,其他线程获取的volatile变量都是最新的。volatile特性二:可以禁止指令重排序volatile关键字保证了操作的可见性,但是不能保证对变量的操作是原子性。volatile的原理加入volatile.原创 2020-06-08 16:52:56 · 2146 阅读 · 0 评论 -
Synchronized锁的升级
Java对象头Synchronized用的锁是存在java对象头里的。如果对象是数组,虚拟机则使用三个字宽(Word)存储对象头,如果是非数组类型则用2个字宽存储,在32位虚拟机 1个字宽=4个字节32位jvm java对象头的存储结构 锁状态 25bit 4bit 1bit 2bit 23bit 2bit 是否是偏向锁 锁标志位 无锁状态 对象的hashCode 对象分代年龄 0 01 偏向锁 线程ID.原创 2020-06-08 15:24:43 · 198 阅读 · 0 评论