Zack's Blog

这里应该有一句格言,但我们没有写


  • 首页

  • 归档

  • 分类

  • 标签

  • 公众号:Zack说码

  • 搜索

Java多线程——ReentrantReadWriteLock源码阅读

发表于 2018-08-27 | 分类于 Java多线程

之前讲了《AQS源码阅读》和《ReentrantLock源码阅读》,本次将延续阅读下ReentrantReadWriteLock,建议没看过之前两篇文章的,先大概了解下,有些内容会基于之前的基础上阅读。
这个并不是ReentrantLock简单的升级,而是落地场景的优化,我们来详细了解下吧。

背景

JUC包里面已经有一个ReentrantLock了,为何还需要一个ReentrantReadWriteLock呢?看看头注解找点线索。

它是ReadWriteLock接口的实现。那看看这个接口怎么说

阅读全文 »

Java多线程——ReentrantLock源码阅读

发表于 2018-08-26 | 分类于 Java多线程

上一章《AQS源码阅读》讲了AQS框架,这次讲讲它的应用类(注意不是子类实现,待会细讲)。
ReentrantLock,顾名思义重入锁,但什么是重入,这个锁到底是怎样的,我们来看看类的注解说明

ReentrantLock与隐式锁synchronized功能相同,但ReentrantLock更具有扩展性。
《锁优化》里提到Java在1.6对隐式锁synchronized做了锁的优化,使其性能与显式锁性能相差无异。所以在两者的选择上,更多的是考虑用法,以及功能上的扩展。

阅读全文 »

Java多线程——AQS框架源码阅读

发表于 2018-08-22 | 分类于 Java多线程

AQS,全称AbstractQueuedSynchronizer,是Concurrent包锁的核心,没有AQS就没有Java的Concurrent包。它到底是个什么,我们来看看源码的第一段注解是怎么说明

阅读全文 »

Java多线程——锁概念与锁优化

发表于 2018-08-08 | 分类于 Java多线程

为了性能与使用的场景,Java实现锁的方式有非常多。而关于锁主要的实现包含synchronized关键字、AQS框架下的锁,其中的实现都离不开以下的策略。

悲观锁与乐观锁

  • 乐观锁。乐观的想法,认为并发读多写少。每次操作的时候都不上锁,直到更新的时候才通过CAS判断更新。对于AQS框架下的锁,初始就是乐观锁,若CAS失败则转化为悲观锁。
  • 悲观锁。悲观的想法,认为并发写多读少。每次操作数据都上锁,即使别人想读也要先获得锁才能读。对于1.6以前的synchronized关键字,则是悲观锁的实现之一。

CAS无锁算法

全称为 Compare and Swap。CAS有三个操作数,内存值V,旧预期值(已获得的旧数据)A,修改新值B。当且仅当V与A的值相同(compare),才能把V替换为B(Swap)。其中Java中内存值可以通过volatile关键字标识获取,该关键词可以使变量对所有线程实时可见。

阅读全文 »

JVM学习记录——GC对象搜索算法

发表于 2018-05-30 | 分类于 JVM深入

Java与C最大的区别或许就是Java拥有垃圾回收(Garbage Collect)功能,可以让开发人员无需过多关心程序中的对象内存如何管理,更专注于业务的开发。但是如果不好好了解GC,也遇到性能瓶颈时很难容易的解决。

GC回收的对象是无用的对象,狭义是没有被引用的对象。如何在内存中找到这些对象,一般有以下两种

阅读全文 »
1…345…9
Zack Ku

Zack Ku

41 日志
13 分类
41 标签
RSS
Links
  • luhuancheng
0%
© 2021 Zack Ku
粤ICP备 -18124360号