多线程
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 · 883 阅读 · 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 · 2151 阅读 · 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 评论