Java并发编程
文章平均质量分 75
Java并发编程
程序员中最靓的仔
这个作者很懒,什么都没留下…
展开
-
Java总的CAS与ABA问题
CAScas全称是 Compare and swap 也就是比较-置换也被称作自旋锁、轻量级锁、乐观锁在我们程序执行的基本步骤是 取值—计算—赋值 三步,如何保证这三步的原子性是并发编程的基础。我们要实现并发程序的原子性就要保证在取值计算赋值操作时,不能有其他线程在同时修改,原子性的基本实现分为三步,例如AtomicInteger的递增计算第一步:取出旧值第二步:计算新值第三步:比较旧值与内存中的值是否相同,相同赋值,不同则自旋继续1.2.3的步骤...原创 2022-04-15 10:35:13 · 266 阅读 · 0 评论 -
Synchronization 锁
Synchronization 锁基础知识点synchronized 锁信息保存在对象头当中。Monitor Record 是每个线程的私有数据结构,synchronized的锁对象都有一个monitor都会和线程的Monitor Record 关联,同步代码块是通过monitor enter 和monitor exit 实现,monitor enter 会插入到同步代码块的头部,monitorexit 会插入到方法的结尾或者出现异常的地方。当线程执行monitorenter 与对象头的monit原创 2022-04-15 10:26:45 · 350 阅读 · 0 评论 -
ReetrantLock 锁
公平与非公平公平锁:在获取锁时存在一个队列,后到的线程会自动排在后面,等待前面的线程执行结束后执行。体现一个先来后到的公平性。非公平锁:实现原理和公平锁存在一些区别,在获取锁时会先尝试获取抢占锁,不去排队,抢占成功则直接向下执行,抢占失败也会加入到队列的后面,等待排队。new ReentrantLock();默认是非公平锁。会稍稍提升一点性能。因为减少的入队列和出队的损耗。true为公平锁。lock、unlock、tryLocklock: ReentrantLock 可以设置超时时间,是可重原创 2022-04-13 21:13:31 · 757 阅读 · 0 评论 -
Java 内存模型
为了更好的理解 Java 是如何实现 按需禁用缓存和编译优化 的,我们首先需要对 Java 的内存模型有一个初步的了解。Java 内存模型主要由以下三部分构成:1 个主内存、n 个线程、n 个工作内存(与线程一一对应),数据就在它们三者之间来回倒腾。那么怎么倒腾呢?靠的是 Java 提供给我们的 8 个原子操作:lock、unlock、read、load、use、assign、store、write,其操作流程示意图如下:一个变量从主内存拷贝到工作内存,再从工作内存同步回主内存的流程为:|主内存|原创 2022-03-29 14:04:53 · 2468 阅读 · 0 评论 -
Happens-Before 规则& volatile 的实现原理
根据语义,Happens-Before,就是即便是对于不同的线程,前面的操作也应该发生在后面操作的前面,也就是说,Happens-Before 规则保证:前面的操作的结果对后面的操作一定是可见的。Happens-Before 规则本质上是一种顺序约束规范,用来约束编译器的优化行为。就是说,为了执行效率,我们允许编译器的优化行为,但是为了保证程序运行的正确性,我们要求编译器优化后需要满足 Happens-Before 规则。根据类别,我们将 Happens-Before 规则分为了以下 4 类:操作的原创 2022-03-29 13:56:29 · 568 阅读 · 0 评论