Java线程池基础
线程池 什么是线程池?为什么要使用线程池?线程池好处? 什么是线程池? 线程作为操作系统宝贵的资源,对它的使用需要进行控制管理,线程池就是采用池化思想(类似连接池、常量池、对象池等)管理线程的工具。JUC 给我们提供了 ThreadPoolExecutor 体系类来帮助我们更方便的管理线程、并行执行任务。 为什么要使用线程池?线程池的好处? 池化技术池化技术的思想主要是为了减少每次...
线程池 什么是线程池?为什么要使用线程池?线程池好处? 什么是线程池? 线程作为操作系统宝贵的资源,对它的使用需要进行控制管理,线程池就是采用池化思想(类似连接池、常量池、对象池等)管理线程的工具。JUC 给我们提供了 ThreadPoolExecutor 体系类来帮助我们更方便的管理线程、并行执行任务。 为什么要使用线程池?线程池的好处? 池化技术池化技术的思想主要是为了减少每次...
线程安全 - 锁 线程安全的本质? 多个线程访问共享的资源时,一个线程对资源进行修改时,其他线程也需要对这个线程进行读或者写操作,导致数据出现错误。 为什么多线程同时访问(读写)同个变量,会有并发问题? JMM(Java 内存模型) 规定了所有的变量都存储在主内存中,每个线程都有自己的工作内存;线程的工作内存中保存了该线程中用到的变量的主内存副本拷贝,线程对变量的所有操作都必须...
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(),还是正则表达式,有一些特殊字符需要转义,这些字符是: ( [ { / ^ - $ ¦ } ...