![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
m0_51247668
这个作者很懒,什么都没留下…
展开
-
synchronized
synchronized 实现对象模型总结:每一个Java类,在被JVM加载的时候,JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。当我们在Java代码中,使用new创建一个对象的时候,JVM会创建一个instanceOopDesc对象,这个对象中包含了两部分信息,对象头以及元数据。对象头中有一些运行时数据,其中就包括和多线程相关的锁的信息。元数据其实维护的是指针,指向的是对象所属的类的instanceKlass每一个Java类,在被JVM加载的时候原创 2020-11-22 23:47:13 · 111 阅读 · 1 评论 -
AQS独占锁的释放
Example: ReentrantLock的锁释放由于锁的释放操作对于公平锁和非公平锁都是一样的, 所以, unlock的逻辑并没有放在 FairSync 或 NonfairSync 里面, 而是直接定义在 ReentrantLock类中: public void unlock() { sync.release(1); }releaserelease方法定义在AQS类中,描述了释放锁的流程public final boolean release(int arg)原创 2020-11-22 18:26:21 · 314 阅读 · 0 评论 -
AQS源码 独占锁的获取
内部变量int state状态双向链表队列。 Node tail, Node head持有锁的线程 Thread exclusiveOwnerThrea /** * Head of the wait queue, lazily initialized. Except for * initialization, it is modified only via method setHead. Note: * If head exists, its waitStat原创 2020-11-22 16:56:38 · 130 阅读 · 0 评论 -
volatile
从上面我们可以看出,缓存一致协议很好的保证了多处理器间缓存一致性的问题。这样看来,我们并没有使用 volatile 关键字的必要,硬件层本身实现了多处理器间的缓存一致性并且对其上层是透明的。但事实并非如此,处理器除缓存外,计算单元与缓存系统间还隔着本地寄存器和缓冲区,处理器本身完成了计算但并没有及时将新值刷新到缓存的话,缓存一致协议并不会起作用,数据的新值对其它处理器的可见性依然无法得到保证。...原创 2020-10-01 16:52:29 · 66 阅读 · 0 评论