![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 91
最近一个月我面试寒假实习,整理写了一些面经知识点,放上来。
北&&木
这个作者很懒,什么都没留下…
展开
-
JUC下锁和工具的整理
JUC锁框架概述Lock接口,Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作ReadWriteLock接口,维护一对相关的锁,一个用于只读,一个用于写入,当没有write时读取锁可以由多个reader线程同时保持,写入锁是独占锁AbstractQueuedSynchonizer,AQS,其为实现依赖于先进先出等待队列的阻塞锁和相关同步器提供一个框架。AbstractOwnableSynchonizer,可以由线程以独占方式拥有同步器,此类为创建锁和相关同步器提供基原创 2021-01-12 11:49:51 · 162 阅读 · 0 评论 -
HashMap相关源码补充(扩容)
初始化桶大小为16,最大值为 1<<30,也就是2的30次方,因为2的31次方在java中是负数,实际上在resize方法中有一个判定if (oldCap >= MAXIMUM_CAPACITY) { threshold = Integer.MAX_VALUE; return oldTab;}当桶的数量超过1<<30的时候会变成Integer.Max_VALUE字段table 真正存储数据的数组字段s原创 2021-01-12 11:42:43 · 97 阅读 · 0 评论 -
ConcurrentHashMap相关源码流程
ConcurrentHashMap的put流程 public V put(K key, V value) { return putVal(key, value, false); }put方法中调用了putVal方法putVal中先检测K,V是否为空取得key的hash值遍历数组(遍历中)检测是否初始化,没有则初始化(遍历中)通过hash计算出一个表中的位置,如果没有元素使用cas尝试添加(没有加锁),失败则自旋保证成功。检测到如果ha原创 2021-01-03 23:03:25 · 164 阅读 · 0 评论 -
线程池部分源码解析及部分流程
线程池帮我们重复管理线程,避免创建大量的线程增加开销池化及线程池流程先建立一个线程池,已经创建一定数量的空闲线程;当子任务需要创建一个线程时,直接从线程池中获取空闲线程(对应选取空闲的门),执行任务;任务完成后,将线程归还到线程池中,重归空闲;其余任务亦是如此;最后整个任务结束后,销毁所有线程,关闭线程池。实际上过程创建线程池之后,当需要创建一个线程,调用线程池execute提交一个runnable,然后判断工作线程数是否小于核心线程数,如果小于则调用addworker原创 2021-01-03 23:00:08 · 70 阅读 · 0 评论