![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发之美
文章平均质量分 91
深入了解Java并发编程
深夜面包
这个作者很懒,什么都没留下…
展开
-
由浅入深,全面解析 ThreadLocal 关键字
由浅入深,全面解析 ThreadLocal 关键字四种引用类型强引用:使用 new 方法创造出来的对象,默认都是强引用。GC的时候,垃圾回收器将永远不会回收被引用的对象,就算内存不够,抛出OutOfMemoryError 也不会回收对象,死了也不回收。软引用:使用 SoftReference 修饰的对象被称为软引用。软引用指向的对象,如果内存够不回收,内存不够则回收。常用于内存敏感的应用,比如高速缓存。;弱引用:使用 WeakReference 修饰的对象被称为弱引用。弱引用指向的对象,无论内存够原创 2022-05-13 14:33:45 · 323 阅读 · 0 评论 -
多线程基本了解
多线程基本了解1、进程、线程多线程的意义为了能提⾼程序的执⾏效率,提⾼程序运⾏速度线程间的切换和调度的成本远远⼩于进程。多核 CPU 时代意味着多个线程可以同时运⾏,这减少了线程上下⽂切换的开销。多线程并发编程正是开发⾼并发系统的基础,利⽤好多线程机制可以⼤⼤提高系统的并发能⼒以及性能进程进程是系统进行资源分配一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、虚拟内存、文件句柄等)比较大原创 2022-05-12 14:35:10 · 184 阅读 · 0 评论 -
HashMap、ConcurrentHashMap、CopyOnWrite详解分析
HashMap、ConcurrentHashMap、CopyOnWrite详解分析1、HashMap数组 + 链表 + (红黑树 jdk >= 8)HashMap重要属性默认初始容量:DEFAULT_INITIAL_CAPACITY = 1 << 4最大Hash表容量:MAXIMUM_CAPACITY = 1 << 30负载因子:DEFAULT_LOAD_FACTOR = 0.75f负载因子过大会导致哈希冲突明显增加;负载因子过小会导致哈希表频繁扩容;默认原创 2022-05-12 13:48:32 · 1643 阅读 · 0 评论 -
彻底搞懂AQS
1、AQS (AbstractQueuedSynchronizer)AQS可以理解为抽象队列同步器,他定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS核心要点:State变量 + CLH队列 + CASAQS核心思想:如果同步状态未被锁定(即state = 0),那么就将持有操作权线程指向当前线程,同步状态为锁定状态(即state = 1);如果同步状态为锁定状态,将暂时获取不到操作权的线程加入到CLH队列中等待唤醒。CLH队列方法和属性值含义原创 2022-05-11 10:27:34 · 200 阅读 · 0 评论 -
Synchronized详解
Synchronized详解1、同步器的意义多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问可变:资源可以在其生命周期内被修改Java 中,提供了两种方式来实现同步互斥访问:synchronized 和 Lock同步器的本质就是加锁,加锁目的:序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问)当多个线程执行一个方法时,该方法内部的局部变量并不是临原创 2022-05-10 13:58:47 · 241 阅读 · 0 评论 -
MESI缓存一致性协议详解
MESI缓存一致性协议详解1、CPU为何要有高速缓存CPU中内置了少量的高速缓存以解决I\O速度和CPU运算速度之间的不匹配问题。带有高速缓存的CPU执行计算的流程程序以及数据被加载到主内存指令和数据被加载到CPU的高速缓存CPU执行指令,把结果写到高速缓存高速缓存中的数据写回主内存2、局部性原理CPU访问存储设备时,无论是存取数据或存取指令,都趋于聚集在一片连续的区域中,这就被称为局部性原理。局部性原理包含:时间局部性(Temporal Locality):如果一个信息原创 2022-04-29 10:50:47 · 1302 阅读 · 0 评论 -
JMM内存模型&volatile
JMM内存模型&volatile1、JMM内存模型什么是JMM模型?Java内存模型( Java Memory Model 简称 JMM)是一种抽象的概念,描述的是一组规则或规范。JVM运行程序的实体是线程,而每个线程创建时 JVM 都会为其创建一个工作内存,用于存储线程私有的数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,原创 2022-04-28 17:48:21 · 256 阅读 · 0 评论 -
深入了解线程池
深入了解线程池1、线程池线程池介绍线程池,顾名思义就是一个线程缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java中提供线程池对线程进行统一分配、调优和监控作用:线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。优点:线程复用。减少线程创建,消亡的开销,提高性能;提高响应速度。当任务到达时,任务可以不需要原创 2022-05-12 18:00:36 · 1007 阅读 · 0 评论 -
了解操作系统底层工程
了解操作系统底层工程1、冯诺依曼计算机模型详解现代计算机模型是基于冯诺依曼计算机模型计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。程序与数据一样存储,按程序编排的顺序,一步一步地取出指令,自动地完成指令规定的操作是计算机最基本的工作模型。计算机五大核心组成部分控制器(Control):是整个计原创 2022-04-28 11:54:17 · 356 阅读 · 0 评论