![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程的艺术
文章平均质量分 68
azaxx
这个作者很懒,什么都没留下…
展开
-
ReentrantReadWriteLock
读锁的释放写锁写锁由于是独占的,和ReentrantLock比较相似,就不额外列出。有个比较有意思的是writeShouldBlock方法,它在这的作用其实就是区分公平锁和非公平锁吧。原创 2022-07-05 22:42:49 · 95 阅读 · 0 评论 -
Lock以及AQS源码加理解
要使用一个自定义锁,要实现Lock接口,我们可以看到Lock中的方法都是基于Sync这个内部类的。所以自定义锁的时候我也创建了一内部类Sync,继承了AQS。对于AQS,它提供了一堆模板方法,这些方法不需要我们实现,而只有5个方法我们可以重写,那就是:RenntrantLock其实就是一个实现了Lock接口的类。它所做的也是我们上诉所说的实现了一个自定义锁。我们来尝试理解一下lock()这个方法它做了什么,这里先讨论非公平锁,因为默认是非公平锁acquire()公平锁公平锁的区别主要就是在第一次原创 2022-07-05 21:36:03 · 85 阅读 · 0 评论 -
Java并发编程基础
文章目录Java并发编程基础线程优先级线程的状态Daemon线程启动或终止线程启动线程理解中断安全地终止线程线程间通信volatile和synchronized关键字synchronized等待/通知机制等待通知机制的经典范式Java并发编程基础什么是线程:现代操作系统运行一个程序时,会为其创建一个线程。一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时进行。线程优先级Java线程中通原创 2022-03-28 11:00:46 · 282 阅读 · 0 评论 -
Java并发机制底层实现-Java内存模型
文章目录Java内存模型提出问题通信同步JMM简易的通信模型从源代码到指令序列的重排序内存屏障Happens before思想重排序数据依赖性as-if-serial程序顺序规则重排序会影响多线程顺序一致性顺序一致性内存模型Type1:线程间正确的同步了Type2:没有同步volatile的内存语义volatile内存语义的实现JSR-133增强了volatile的内存语义锁的内存语义锁内存语义的实现可重入锁reentrantLock公平锁非公平锁为什么CAS可以实现读写volatile的内存语义concu原创 2022-03-25 14:25:09 · 625 阅读 · 0 评论 -
Java并发机制底层实现-锁升级
文章目录锁升级无锁偏向锁偏向锁的使用过程:轻量级锁轻量锁的加锁轻量锁的释放重量级锁锁升级无锁无竞争情况存在竞争,那就用非锁方式实现同步线程锁标志位为01偏向锁只有一个线程在使用变量Mark Word的前23bit为使用变量的线程ID锁标志位为01偏向锁的使用过程:检查Mark Word里面是否存储着当前线程的ID如果有,那么说明已经获得了锁,直接使用如果没有,测试一下偏向锁的标记是否为1如果没有就直接用CAS去竞争锁如果有就用CAS去尝试把线程的ID换到Mark .原创 2022-03-22 20:05:20 · 501 阅读 · 0 评论 -
Java并发机制底层实现-synchronized
文章目录synchronized一、synchronized的基础二、实现原理1.代码块同步2.方法同步3.指令细节synchronized一、synchronized的基础Java中的每个对象都有内部锁,都可以作为一个锁;普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的class对象同步方法块,锁是Synchronized括号中配置的对象二、实现原理JVM基于进入和退出Monitor对象来实现方法同步和代码块同步;这个Monitor翻译为监视器,但是可以理解为一个每次只允原创 2022-03-22 19:22:56 · 502 阅读 · 0 评论 -
Java并发机制底层实现-volatile
Java 并发机制的底层实现volatile文章目录Java 并发机制的底层实现volatile的定义和实现原理一、使用volatile时处理器中做的事(1)Lock前缀指令会引起处理器缓存回写到内存(2)一个处理器的缓存回写到内存会导致其他处理器的缓存无效;二、volatile的使用优化LinkedTransferQueue什么时候不该追加到64字节总结volatile的定义和实现原理java语言规范中对其的定义:Java编程语言允许线程访问共享变量,为了确保共享变量被准确和唯一的更新,线程原创 2022-03-22 19:03:24 · 616 阅读 · 0 评论