
集合与并发
文章平均质量分 85
集合、锁、AQS等
P@ssW0rd
不积跬步,无以至千里。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ReentrantLock源码解析和AQS常见问题分析
本文利用ReentrantLock作为阅读AQS的切入口,通过问答的方式让大家更好的去理解今天要掌握的点,也欢迎大家说说自己的答案。原创 2023-08-03 09:33:32 · 257 阅读 · 0 评论 -
图文Debug详解 ThreadLocal内存泄漏的原因
一、前言在分析ThreadLocal导致的内存泄露前,需要了解一下内存泄露、强引用与弱引用以及GC回收机制。这样才能更好分析ThreadLocal泄漏的原因。如果了解上述问题可直接跳到第二节。1.1 内存泄漏如果不会被使用的对象或者变量占用的内存不能被回收,就是内存泄漏。如果泄漏的数据量足够大,可能会引起内存溢出,导致程序异常结束。1.2 强引用与弱引用强引用: 如 String name = new String(); 一个对象具有强引用,不会被垃圾回收器回收。当内存空间不足,Java虚拟机原创 2022-05-23 09:54:25 · 5139 阅读 · 2 评论 -
CountDownLatch和CyclicBarrier的区别
一、前言在JDK的并发包里提供了几个非常有用的并发工具类。如线程等待的CountDownLatch和CyclicBarrier。二、等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作后再执行后续的代码。2.1 应用场景1个线程等多个线程:当程序需要从3个接口获取数据的时候,可以同时开3个线程去获取数据,等数据都获取到了,主线程再进行下一步操作。1个线程等多个线程:解析Excel的多个shell页,可以开多个线程去读取。多个线程等待:原创 2022-05-15 18:12:56 · 721 阅读 · 0 评论 -
Java线程池七个参数详解
java多线程开发时,常常用到线程池技术,这篇文章是对创建线程池时的7个参数的详细介绍。原创 2022-05-10 21:04:31 · 10525 阅读 · 1 评论 -
深度剖析 Synchronized 锁升级过程
锁升级:【无锁】【偏向锁】【轻量级锁】【重量级锁】锁升级原理锁优化原创 2022-05-03 11:36:14 · 1044 阅读 · 0 评论 -
多线程之Runnable、Callable和Future的详解和区别
Runnable、Callable和Future的详解和区别在程序运行中,执行的时间和用户的体验是密切相关的,人们不希望用一个经常卡顿的网站或应用,这时候多线程能给程序带来质的提升。一、Runnable简介Runnable接口只有一个抽象的run()方法,此方法是在Thread.start()的时候由JVM调用run方法,创建一个线程,并调用run方法。例子public class RunnableTest { public static void main(String[] arg原创 2020-11-22 22:08:32 · 1980 阅读 · 1 评论 -
大厂必问其他集合题
1、HashMap在多线程环境下存在线程安全问题,那你一般都是怎么处理这种情况的?使用Collections.synchronizedMap(Map)创建线程安全的map集合;HashtableConcurrentHashMap不过出于线程并发度的原因,我都会舍弃前两者使用最后的ConcurrentHashMap,他的性能和效率明显高于前两者2、能跟我聊一下Hashtable么1) HashMap相比Hashtable是线程安全的,适合在多线程的情况下使用,但是效率可不太乐观。2)Hashta原创 2020-09-23 10:41:55 · 103 阅读 · 0 评论 -
大厂必问17个HashMap题
1、介绍下 HashMap 的底层数据结构吧我们现在用的都是 JDK 1.8,底层是由“数组+链表+红黑树”组成,如下图,而在 JDK 1.8 之前是由“数组+链表”组成。2、为什么要改成“数组+链表+红黑树”?主要是为了提升在 hash 冲突严重时(链表过长)的查找性能,使用链表的查找性能是 O(n),而使用红黑树是 O(logn)。3、那在什么时候用链表?什么时候用红黑树?a、对于插入,默认情况下是使用链表节点。当同一个索引位置的节点在新增后达到9个(阈值8):如果此时数组长度大于等于 64,原创 2020-09-23 10:36:10 · 193 阅读 · 0 评论 -
JDK1.8-LinkedList源码分析
LinkedList源码解析原创 2020-09-07 16:52:14 · 160 阅读 · 0 评论 -
JDK1.8-ArrayList源码分析
初始化和构造函数 //设置初始容量 private static final int DEFAULT_CAPACITY = 10; //空实例数组 private static final Object[] EMPTY_ELEMENTDATA = {}; // 默认大小的空实例数组,在第一次调用ensureCapacityInternal时会初始化长度为10 private static final Object[] DEFAULTCAPACITY_EMPT原创 2020-09-07 17:17:56 · 155 阅读 · 0 评论