Java CAS
CAS 什么是 CAS? CAS 全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent 包中的原子类就是通过 CAS 来实现了乐观锁。CAS 指的是 现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。CA...
CAS 什么是 CAS? CAS 全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。java.util.concurrent 包中的原子类就是通过 CAS 来实现了乐观锁。CAS 指的是 现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。CA...
AQS 什么是 AQS? AQS(AbstractQueuedSynchronizer),这可谓是 Doug Lea 老爷子的大作之一。AQS 即是抽象队列同步器,是用来构建 Lock 锁和同步组件的基础框架,很多我们熟知的锁和同步组件都是基于 AQS 构建,它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成资源获取线程的排队工作,比如 ReentrantLoc...
ThreadLocal 什么是 ThreadLocal? ThreadLocal 类用来提供线程内部的局部变量。这些变量在多线程环境下访问 (通过 get 或 set 方法访问) 时能保证各个线程里的变量相对独立于其他线程内的变量,ThreadLocal 实例通常来说都是 private static 类型。总结:ThreadLocal 不是为了解决多线程访问共享变量安全问题;而是为每个...
原子类 基本类型原子类 AtomicReference AtomicReferenceFieldUpdater 并发集合类 ConcurrentHashMap ConcurrentHashMap 原理 JDK7.0 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成,即 ConcurrentHashMap 把哈希桶数组切...
多线程 线程基础 进程和线程的区别? 一个程序至少有一个进程,一个进程至少有一个线程 线程的划分尺度小于进程,使得多线程程序的并发性高 进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率 进程是具有⼀定独⽴功能的程序关于某个数据集合上的⼀次运⾏活动,进程是系统进⾏资源分配和调度的⼀个独⽴单位。线程是进程的⼀个实体,是 CPU 调度和...
JMM(Java 线程内存模型) 内存模型背景? 计算机的存储结构 冯诺依曼结构存储结构:速度从快到慢的排序是:寄存器 -> 高速缓存 -> 内存 -> 外部存储器 高速缓存 现代的 CPU 速度是远大于主内存的速度的,为了解决这种速度不匹配的问题,引入了缓存。 现代 CPU 一般有 L0、L1、L2 和 L3 三级缓存,L0 是寄存器缓存,L1 和 L2 是多核...
Java String 相关问题 String 是 Java 中的基本数据类型吗?是可变的吗?是线程安全的吗? String 不是基本数据类型,Java 中的基本数据类型是:byte, short, int, long, char, float, double, boolean String 是不可变的。 String 是不可变类,⼀旦创建了 String 对象,我们就⽆法...
String 基础 String 实现原理? 低版本 final 的 char 数组 高版本 Java8? final 的 byte 数组为何用 byte 数组? Java 中需要转义的字符 不管是 String.split(),还是正则表达式,有一些特殊字符需要转义,这些字符是: ( [ { / ^ - $ ¦ } ...
注解 什么是注解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。 注解的作用 标记,如告诉编译器一些信息 编译时动态处理,如动态生成代码 运行时动态处理,如得到注解信息 声明一个注解类型 Java 中所有的注解...
泛型 基本概念 什么是泛型?为什么要使用泛型? 泛型,即 “ 参数化类型 “。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 泛型的本质是为了参数化类型(在不创建...